我从本地 Gitlab 运行程序到本地服务器的 SSH 有问题,这些是我的小故事的人物:

  • 在流浪机器内设置本地 Gitlab Runner
  • 本地服务器模拟这是一个带有静态IP的流浪机器,
  • Gitlab 管道存储库包含本地运行器和本地服务器之间的 SSH 连接。

最终结果应该是通过本地 Gitlab Runner并使用SSH将演示文件部署到本地服务器

触发 Gitlab 管道存储库 ->本地 Gitlab Runner -> SSH 到本地服务器-> 将演示文件部署到本地服务器。

这是我的.gitlab-ci.yml文件:

image: ubuntu:latest

stages:
  - deploy

deploy:
  stage: deploy
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y && apt-get install -y iputils-ping )'
    - eval $(ssh-agent -s)
    - echo "$PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    # - echo "$AWS_EC2_PRIKEY" | tr -d '\r' | ssh-add - > /dev/null

    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh

    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  script:
    - ping -c 2 192.168.213.160
    - ssh -vvvv -o StrictHostKeyChecking=no vagrant@192.168.213.160 "ls ~"


    # - ping -c 2 ec2XXX.amazonaws.com
    # - ssh -o StrictHostKeyChecking=no ec2-user@ec2XXX.amazonaws.com "ls ~"

  tags:
    - docker
  only: 
    - master

两个重要说明:

  1. 我试图用 EC2 替换本地服务器(请参阅 .gitlab-ci.yml 文件中的注释行)并且工作正常
  2. 我可以从 runner 的 vagrant 机器内部 ping 或者在管道到本地服务器的过程中通过 runner成功

这是 SSH 日志的一部分:

 debug1: Server host key: ecdsa-sha2-nistp256 SHA256:6OLHurOSA2T9E/Q00bMRa129Ma21bYG2U+9wCqNr0A0
 Warning: Permanently added '192.168.213.160' (ECDSA) to the list of known hosts.
 debug3: send packet: type 21
 debug2: set_newkeys: mode 1
 debug1: rekey after 134217728 blocks
 debug1: SSH2_MSG_NEWKEYS sent
 debug1: expecting SSH2_MSG_NEWKEYS
 debug3: receive packet: type 21
 debug1: SSH2_MSG_NEWKEYS received
 debug2: set_newkeys: mode 0
 debug1: rekey after 134217728 blocks
 debug2: key: (stdin) (0x555e8014a4a0), agent
 debug2: key: /root/.ssh/id_rsa ((nil))
 debug2: key: /root/.ssh/id_dsa ((nil))
 debug2: key: /root/.ssh/id_ecdsa ((nil))
 debug2: key: /root/.ssh/id_ed25519 ((nil))
 debug3: send packet: type 5
 debug3: receive packet: type 7
 debug1: SSH2_MSG_EXT_INFO received
 debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
 debug3: receive packet: type 6
 debug2: service_accept: ssh-userauth
 debug1: SSH2_MSG_SERVICE_ACCEPT received
 debug3: send packet: type 50
 debug3: receive packet: type 51
 debug1: Authentications that can continue: publickey
 debug3: start over, passed a different list publickey
 debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
 debug3: authmethod_lookup publickey
 debug3: remaining preferred: keyboard-interactive,password
 debug3: authmethod_is_enabled publickey
 debug1: Next authentication method: publickey
 debug1: Offering public key: RSA SHA256:l2h6Lwchp4znO049FtrtUCQFboW2OGLT6vKj27jc9ss (stdin)
 debug3: send_pubkey_test
 debug3: send packet: type 50
 debug2: we sent a publickey packet, wait for reply
 debug3: receive packet: type 51
 debug1: Authentications that can continue: publickey
 debug1: Trying private key: /root/.ssh/id_rsa
 debug3: no such identity: /root/.ssh/id_rsa: No such file or directory
 debug1: Trying private key: /root/.ssh/id_dsa
 debug3: no such identity: /root/.ssh/id_dsa: No such file or directory
 debug1: Trying private key: /root/.ssh/id_ecdsa
 debug3: no such identity: /root/.ssh/id_ecdsa: No such file or directory
 debug1: Trying private key: /root/.ssh/id_ed25519
 debug3: no such identity: /root/.ssh/id_ed25519: No such file or directory
 debug2: we did not send a packet, disable method
 debug1: No more authentication methods to try.
 vagrant@192.168.213.160: Permission denied (publickey).
 ERROR: Job failed: exit code 1

有什么想法吗? 提前致谢

#1楼 票数:0 已采纳

我的错误是我在 Gitlab 管道中使用了本地服务器的私钥;

相反,我在 Gitlab 管道中使用本地 Gitlab Runner Machine 的~/.ssh/authorized_keys ,在本地服务器的~/.ssh/authorized_keys中使用 Runner 的~/.ssh/authorized_keys

看我的草图: 在此处输入图片说明

有关更多详细信息,请参阅我的文章: 如何配置 Gitlab-CI 以通过 SSH 自动部署您的应用程序

  ask by Jehad Nasser translate from so

未解决问题?本站智能推荐:

1回复

作业返回“主机密钥验证失败。” 当我在 gitlab-ci 上运行 ssh [重复]

这个问题在这里已经有了答案: Git 错误:连接到远程存储库时“主机密钥验证失败” (23 个回答) 6 个月前关闭。
1回复

来自共享 Gitlab 运行程序的 SSH 停止工作

这在以前确实有效! 我的管道 SSH 部署步骤到 DO 框并从 docker 注册表中提取代码。 如前所述,这在以前有效,这是我当时在.gitlab-ci.yml deploy步骤,在Using SSH下从这里获得了很好的灵感: deploy: stage: deploy image: d
1回复

如果通过 GitLab CI 完成,SSH 到远程服务器将被拒绝

我们有一个 RHEL 7 远程服务器,我在其中创建了一个名为gitlabci的虚拟用户。 当通过 SSH 连接到远程服务器时,我生成了一个公私密钥对(用于从 GitLab 抓取文件时使用) 将公钥作为部署密钥上传,以便稍后在我们设置 CI 时使用 在我的本地机器上生成另一
4回复

如何为 Gitlab 运行程序启用通过 SSH 的克隆?

我在 Windows Gitlab runner 上通过 HTTP 克隆大型存储库时遇到了一些问题。 我尝试了几种方法来进行浅层克隆或禁用克隆压缩。 仍然没有运气。 通过 SSH 克隆同一个存储库作为临时解决方案非常有效,我希望在我们的 Gitlab CI 过程中使用它。 现在的问题是我不知道如
1回复

GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥

我正在尝试在我的 GitLab CI 管道中检查一个私有的 GitLab 存储库,但我似乎无法使 SSH 身份验证正常工作。 在我的本地机器上,我创建了一个 SSH 私钥/公钥对。 我使用本地机器仅用于创建该密钥对,而不是将其用作服务器/GitLab 运行器。 我将公钥作为部署密钥添加到我的 G
1回复

GitLab Runner:在没有shell的情况下切换用户后在服务器上执行代码

我正在尝试为 GitLab 项目设置自动部署。 一旦更改合并到开发分支中,运行程序将登录服务器,切换到不同的用户,进入 web 目录,执行 git pull 以及其他一些任务。 如果您不熟悉 GitLab 运行程序,它本质上只是一个临时服务器(docker 映像),可以执行您需要的任何操作。 我只
11回复

让 GitLab CI 克隆私有仓库

我设置了 GitLab 和 GitLab CI 来托管和测试我的一些私人存储库。 对于我在这个系统下的 composer 模块,我设置了 Satis 来解析我的私有包。 显然,这些私有包需要一个 ssh 密钥来克隆它们,并且我在终端中使用了这个 - 我可以运行 composer install 并
1回复

使用Gitlab部署密钥和写访问权限

我目前正在运行CE版本8.17.4,并且我正在尝试使用写访问权限设置部署密钥(截至8.16),以便我的运行时实例可以将构建工件提交回存储库。 我采取了以下步骤进行设置: 在runner实例上,我使用以下命令生成了ssh keypair: sudo ssh-keygen -t rsa