deployment - 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 连接工作正常。只是跑步者有问题。谢谢你的帮助!
解决方案
我发现的最佳解决方案是运行 ubuntu gitlab-image 并手动调用其中的 docker 并使用绑定到 ssh 的卷,或者如果您在 gitlab 中的 dind 图像上遇到困难,则使用带有 gitlab 机密密码的 aws 实例. 两者都不是真正的最佳选择,但由于容器化在隔离中的有效性,您必须使用两种方法之一来解决它。
推荐阅读
- mediawiki - 如何让 Xowa 在浏览器中运行(离线)
- dialog - Prevent VS2017 from connecting to SQL database
- angular - 用 Angular 编写 Http 服务的测试用例
- automated-tests - openshift中是否有像暴风雨或拉力赛这样的测试框架?
- python - 如何在python中进行多级继承和方法覆盖
- codeigniter-3 - 带有 apache 和 php 7.2 的 codeigniter 3.1.9 - 符号链接的路由/重定向问题
- algorithm - 使用带有惰性传播的分段树获得重叠间隔的总长度
- python - 如何在分布式张量流中传递计算图或训练操作
- c++ - 如何正确地将带有变量地址的指针从函数传递到另一个接受引用的函数
- c# - 从通过 javascript 发布的 jso 获取数据/正文