docker - Gitlab CI/Docker:ssh-add 不断要求输入密码
问题描述
我目前正在尝试做的是从 Gitlab CI/CD Docker 容器触发远程机器上的脚本。作业配置如下:
stages:
- deploy
image: maven:3.3.9
server-deploy:
stage: deploy
allow_failure: false
script:
## Install ssh agent
- apt update && apt install openssh-client -y
- eval $(ssh-agent -s)
## Create SSH key file
- "echo \"-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACByjJBGT21Arna/pirWVXQqGAr/aszqQ5HzvrA2MzVDZAAAAJiGKEEKhihB
CgAAAAtzc2gtZWQyNTUxOQAAACByjJBGT21Arna/pirWVXQqGAr/aszqQ5HzvrA2MzVDZA
AAAEAKbObQgJGXbrKQt4wdCy3YQfpVBqkT5RNEt2IYU5pv3HKMkEZPbUCudr+mKtZVdCoY
Cv9qzOpDkfO+sDYzNUNkAAAAFHN2ZW5AREVTS1RPUC0xTjVKUjRSAQ==
-----END OPENSSH PRIVATE KEY-----\" > deploy-key"
## Fix permissions on key file and .ssh folder
- chmod 700 deploy-key; mkdir -p ~/.ssh; chmod 700 ~/.ssh
## Import SSH key
- ssh-add -k deploy-key
## Make sure that ssh will trust the new host, instead of asking
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
## Run script on the remote server
- ssh -t user@255.255.255.255 "./deploy-master"
(SSH 密钥只是一个临时密钥,专门为 SO 问题生成)现在作业在到达“ssh-add -k deploy-key”命令时失败,要求输入密码,如下所示:
$ ssh-add -k deploy-key
Enter passphrase for deploy-key: ERROR: Job failed: exit code 1
SSH 密钥显然没有附加密码,我可以通过在我自己的 Linux 机器上运行完全相同的命令来验证这一点,它们可以正常工作。
所以我的问题是:如何防止 ssh-add 要求输入密码?而且我也很好奇为什么这只发生在 Gitlab CI Docker 容器上而不是我自己的 PC 上。
提前致谢!
解决方案
好的,我得到它的工作。事实证明,ssh-add 对文件格式非常挑剔,尤其是换行符。.gitlab-ci.yml 中的换行符不会直接传输到命令中,因此密钥最终变成了一大行。
这是我解决它的方法:
- echo -----BEGIN OPENSSH PRIVATE KEY----- >> deploy-key
- echo b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW >> deploy-key
- echo QyNTUxOQAAACByjJBGT21Arna/pirWVXQqGAr/aszqQ5HzvrA2MzVDZAAAAJiGKEEKhihB >> deploy-key
- echo CgAAAAtzc2gtZWQyNTUxOQAAACByjJBGT21Arna/pirWVXQqGAr/aszqQ5HzvrA2MzVDZA >> deploy-key
- echo AAAEAKbObQgJGXbrKQt4wdCy3YQfpVBqkT5RNEt2IYU5pv3HKMkEZPbUCudr+mKtZVdCoY >> deploy-key
- echo Cv9qzOpDkfO+sDYzNUNkAAAAFHN2ZW5AREVTS1RPUC0xTjVKUjRSAQ== >> deploy-key
- echo -----END OPENSSH PRIVATE KEY----- >> deploy-key
这样文件中的换行符会自动创建,现在 ssh-add 会选择格式。
推荐阅读
- caching - 为什么 Linux 在使用 GNU Linker 时不缓存对象和/或“.so”文件?
- vaadin - Vaadin 13 Grid 中是否有“全选”复选框(即使在过滤条件下也有效,甚至某些数据不在缓存中?)
- rabbitmq - Masstransit Message 消费者不会重新连接
- python - 使用 Python 的 Payload 中的 Wireshark 图
- java - 使用正则表达式匹配特定运算符
- python - 使用 Python2 与 Python3 从 PrettyTable 打印
- python - 正则表达式耗时太长;有没有人建议加快这个速度?
- python - 使用嵌套循环的 Pandas 分配导致内存错误
- javascript - 选项卡内的引导手风琴
- apache - 如何使用 httpd 将测试 perl 脚本作为 cgi 脚本运行?