首页 > 解决方案 > GitLab Runner 不会通过 scp 连接到其他 ec2 错误:debug1: read_passphrase: can't open /dev/tty: No such device or address

问题描述

目前,我正在尝试使用 docker image gitlab 文件来连接到我的生产服务器并在部署时覆盖生产中的代码。虽然我可以使用给定的私钥从本地计算机 ssh,但每当我尝试将私钥复制为变量并连接时,我总是会收到以下错误:

debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
...
debug1: read_passphrase: can't open /dev/tty: No such device or address
 Host key verification failed.
 lost connection

我已经验证 /dev/tty 地址在两台机器上都存在,并且我的 .pem 可以在 gitlab 运行器复制后正确读取,我已经使用 chmod 建立了适当的权限,并且还尝试了调用 scp 脚本的多种排列. 我目前正在我的 gitlab.yml 文件的 before_script 中运行我的连接,以避免在我的文件中构建 docker 映像的延迟,相关部分包含在下面。

编辑:/dev/tty 也具有正确的权限,我查看了与此问题相关的先前堆栈溢出帖子,它们要么与问题无关,要么不是解决方案

image: docker:19.03.5

services:
    - docker:19.03.1-dind

before_script:
    - docker info
    - apk update
    - apk add --no-cache openssh
    - touch $SSH_KEY_NAME
    - echo "$SSH_KEY" > "./$SSH_KEY_NAME"
    - chmod 700 $SSH_KEY_NAME
    - ls -la /dev/tty
    - scp -v -P 22 $SSH_KEY_NAME -i $SSH_KEY_NAME $PROD_USER@$SERVER_URL:.

抱歉,如果感觉很愚蠢,但我在另一台机器上设置私钥的技术性质方面经验不足,目前我不确定是否需要以特定方式在我的 gitlab 运行器中链接私钥?如果回声可能没有将 .pem 保存为私钥。我为 aws 实例的入站 IP 设置为端口 22 上的所有流量,复制此密钥并从我的 PC 连接工作正常。只是跑步者有问题。谢谢你的帮助!

标签: deploymentgitlabgitlab-cigitlab-ci-runner

解决方案


我发现的最佳解决方案是运行 ubuntu gitlab-image 并手动调用其中的 docker 并使用绑定到 ssh 的卷,或者如果您在 gitlab 中的 dind 图像上遇到困难,则使用带有 gitlab 机密密码的 aws 实例. 两者都不是真正的最佳选择,但由于容器化在隔离中的有效性,您必须使用两种方法之一来解决它。


推荐阅读