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