我想在gitlab CI的不同阶段包括以下命令。
...
script: |
ssh -t ${SOME_USER}@${REMOTE_HOST} '([ -f "${FILE_PATH}/someFile.yaml" ] && cp -v "${FILE_PATH}/someFile.yaml" ${FILE_PATH}/someFile_yaml_$CI_COMMIT_TIMESTAMP.txt)'
...
script: scp -v ${TF_ROOT}${LOCAL_FILE_PATH} ${SOME_USER}@${REMOTE_HOST}:${FILE_PATH}/
...
script: ssh -t ${SOME_USER}@${REMOTE_HOST} sudo chown -cv runner:runner ${FILE_PATH}/someFile.yaml
...
script: ssh -t ${SOME_USER}@${REMOTE_HOST} sudo systemctl restart some-service
...
问题是当我手动执行这个命令时,我必须提供密码,因为这些是远程命令ssh
,有些需要sudo
,这种方法不能在非交互模式(如CI执行)中工作。
那么,在没有密码提示的情况下,如何在Gitlab CI中执行这些命令呢?
发布于 2022-02-27 10:21:04
根据您的问题,我理解的是,您只是想传递密码来运行命令。
我们必须采取不同的方法来解决这个问题,首先,如果ssh用户有sudo密码,可以使用sshpass命令和所有命令。
下面提到了一些命令以供参考:
sshpass -p 'password' scp file.tar.gz root@xxx.xxx.xxx.194:/file/location
sshpass -p 'password' ssh user@ip command
和
另一种方法是创建一个没有密码的sudo用户来运行命令并使用pem键,这样会更安全、更好。
您可以在互联网上搜索使用户无密码以及sudo权限。
我希望这能解决你的问题
发布于 2022-02-27 16:32:51
为什么不使用cron
呢?您可以以root用户身份运行脚本,而无需询问密码。
您可以以根用户的身份执行如下操作:
然后,crontab -e
:
(每45分钟一次)
*/45 * * * * /path/to/script1
(每25分钟,以此类推)
*/25 * * * * /path/to/script2
等等
https://stackoverflow.com/questions/71287058
复制