ssh - Gitlab CI - SSH 权限被拒绝(公钥、密码)

标签 ssh gitlab-ci

我一直在尝试为我的项目设置 CD。我的 Gitlab CI 运行器和我的项目将位于同一服务器上。我关注了https://docs.gitlab.com/ee/ci/examples/deployment/composer-npm-deploy.html但我不断收到 SSH Permission returned (publickey,password). 错误。我的所有变量、私钥和其他变量在项目设置中设置正确。

我使用 ssh-keygen -t rsa -C "my.email@example.com"-b 4096 命令创建了 ssh key (不带密码),并设置了我的 PRODUCTION_PRIVATE_KEY 变量,其中包含 ~/.ssh/id_rsa 文件的内容。

这是我的gitlab-ci.yml:

stages:
  - deploy

deploy_production:
  stage: deploy
  image: tetraweb/php
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$PRODUCTION_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - apt-get install rsync
  script:
    - ssh $PRODUCTION_SERVER_USER@$PRODUCTION_SERVER
    - hostname
  only:
    - master

这是 Gitlab CI 运行程序的输出:

Running with gitlab-ci-multi-runner 9.2.0 (adfc387)
  on ci-test (1eada8d0)
Using Docker executor with image tetraweb/php ...
Using docker image sha256:17692e06e6d33d8a421441bbe9adfda5b65c94831c6e64d7e69197e0b51833f8 for predefined container...
Pulling docker image tetraweb/php ...
Using docker image tetraweb/php ID=sha256:474f639dc349f36716fb98b193e6bae771f048cecc9320a270123ac2966b98c6 for build container...
Running on runner-1eada8d0-project-3287351-concurrent-0 via lamp-512mb-ams2-01...
Fetching changes...
HEAD is now at dfdb499 Update .gitlab-ci.yml
Checking out dfdb4992 as master...
Skipping Git submodules setup
$ which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
/usr/bin/ssh-agent
$ eval $(ssh-agent -s)
Agent pid 12
$ ssh-add <(echo "$PRODUCTION_PRIVATE_KEY")
Identity added: /dev/fd/63 (rsa w/o comment)
$ mkdir -p ~/.ssh
$ echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
$ apt-get install rsync
Reading package lists...
Building dependency tree...
Reading state information...
rsync is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ ssh $PRODUCTION_SERVER_USER@$PRODUCTION_SERVER
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added '{MY_SERVER_IP}' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
ERROR: Job failed: exit code 1

提前致谢。

最佳答案

您需要将公钥添加到服务器,以便将其识别为身份验证 key 。即,将您所使用的私钥对应的公钥内容粘贴到$Production_SERVER上的~/.ssh/authorized_keys中。

关于ssh - Gitlab CI - SSH 权限被拒绝(公钥、密码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363537/

相关文章:

heroku - 'heroku' 似乎不是 git 存储库

git - 如何防止 OpenSSH 关于主机 key 攻击的警告?

ubuntu - 从快照创建 VM 后网络无法正常工作 - GCE

python - 从 GitLab CI 将应用程序部署到 App Engine 时权限被拒绝

vue.js - 如何在 Yarn 中部署私有(private) gitlab 依赖项的包

linux - 在 Linux 的 Db2 CLP 中使用箭头键?

linux - 如何将此 ssh 命令转换为 ssh_config 文件?

gitlab-ci - GitLab 管道相当于 GitHub 操作

docker - Gitlab CI with docker+machine - 使用多个容器来测试应用程序

kubernetes - kubectl apply -f可在PC上运行,但不能在Gitlab Runner中运行