GitLab Runner won't connect to other ec2, via scp ERROR: debug1: read_passphrase: can't open /dev/tty: No such device or address

GitLab Runner won't connect to other ec2, via scp ERROR: debug1: read_passphrase: can't open /dev/tty: No such device or address

目前,我正在尝试使用 docker 图像 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 runner post 复制上正确读取,我已经使用 chmod 和建立了适当的权限还尝试了调用 scp 脚本的多种排列。我目前 运行 我的连接在我的 gitlab.yml 文件的 before_script 中,以避免在我的文件中构建 docker 图像的延迟,相关部分包含在下面。

编辑:/dev/tty 也有正确的权限,我查看了之前与此问题相关的堆栈溢出 post,但它们与问题或不是解决方案

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:.

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

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