ssh 不用手动输密码远程执行命令
小组使用了 GitLab,在某项目中需要利用 CI 进行远程部署,但生产服务器是另一台远程服务器,而 CI Runner 的运行环境是 Docker。
由于 ssh 的安全措施,在建立 ssh 连接时不允许自动化输入密码,必须在出现密码框后手动输入,因此在 CI 流程中无法实现;经过了解,一款名为 sshpass 的工具可以满足此需求;
在本机测试时,使用 提示 1
brew install sshpass
可知此工具的确是破坏了 ssh 的安全性。1
We won't add sshpass because it makes it too easy for novice SSH users to ruin SSH's security.
但在内部机器的 CI Runner Docker 中,不考虑这个问题。Gitlab CI Runner
默认使用的是 alpine:latest
,需要事先安装依赖及
sshpass,因此在 before_script 中加上
apk add --update --no-cache openssh sshpass
安装此工具。
在后续的 job/stage 中,加入远程执行命令脚本:
1 | sshpass -p 'password' ssh -T -o StrictHostKeyChecking=no username@192.168.xxx.xxx 'sh /home/remote/script.sh' |
即可绕过手动输入密码步骤,在 CI 中运行远程 sh 脚本。
在联网环境慎用,防止泄密