Gitlab возвращает Permission denied (publickey,password) для сервера digitalocean

Я пытаюсь реализовать CD для моего докеризованного Django-приложения на дроплете DigitalOcean.

Вот моя .gitlab-ci.yml:

image:
  name: docker/compose:1.29.1
  entrypoint: [""]

services:
  - docker:dind

stages:
  - build
  - deploy

variables:
  DOCKER_HOST: tcp://docker:2375
  DOCKER_DRIVER: overlay2

before_script:
  - export IMAGE=$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME
  - export WEB_IMAGE=$IMAGE/web:web
  - export NGINX_IMAGE=$IMAGE/nginx:nginx
  - apk add --no-cache openssh-client bash
  - chmod +x ./setup_env.sh
  - bash ./setup_env.sh
  - docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY

build:
  stage: build
  script:
    - docker pull $IMAGE/web:web || true
    - docker pull $IMAGE/web:nginx || true
    - docker-compose -f docker-compose.prod.yml build
    - docker push $IMAGE/web:web
    - docker push $IMAGE/nginx:nginx

deploy:
  stage: deploy
  script:
    - mkdir -p ~/.ssh
    - echo "$PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - cat ~/.ssh/id_rsa
    - chmod 700 ~/.ssh/id_rsa
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
    - chmod +x ./deploy.sh
    - scp  -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@$DO_PUBLIC_IP_ADDRESS:/Pythonist.org
    - bash ./deploy.sh
  only:
    - master

Я скопировал свой ключ Publick на рабочий сервер (DO droplet). Задание сборки прошло успешно, но этап развертывания завершился неудачей со следующей ошибкой:

$ chmod 700 ~/.ssh/id_rsa
$ eval "$(ssh-agent -s)"
Agent pid 26
$ ssh-add ~/.ssh/id_rsa
Identity added: /root/.ssh/id_rsa (abdul12391@gmail.com)
$ ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
$ chmod +x ./deploy.sh
$ scp  -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@$DO_PUBLIC_IP_ADDRESS:/Pythonist.org
Warning: Permanently added '143.198.103.99' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@143.198.103.99: Permission denied (publickey,password).
lost connection
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 1

Официальным процессом является "How to Upload an SSH Public Key to an Existing Droplet", но обычно он включает username, а не root.

Хотя ваш конвейер может быть выполнен от имени root (как предполагает сообщение Identity added: /root/.ssh/id_rsa), ваш scp должен использовать удаленного пользователя DO, а не удаленную учетную запись DO root): то же имя пользователя учетной записи, где вы добавили открытый ключ к удаленному ~/.ssh/authorized_keys

Со:

username@$DO_PUBLIC_IP_ADDRESS:/Pythonist.org
# not
root@$DO_PUBLIC_IP_ADDRESS:/Pythonist.org

Попробуйте следующее на сервере Digital Ocean:

cat ~/.ssh/id_rsa.pub

и скопируйте открытый ключ в авторизованные ключи

nano ~/.ssh/authorized_keys

тогда измените разрешение

chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
Вернуться на верх