如何在不提示输入密码的情况下在CI中运行命令



我想在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中执行这些命令呢?

根据你的问题,我理解的是你只想传递密码来运行命令。

我们必须采用不同的方法来解决这个问题。首先,如果您的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权限

我希望这能解决你的问题

为什么不使用cron?您可以以root用户身份运行脚本,而无需询问密码。

您可以作为root用户执行以下操作:

crontab -e,然后:

(每45分钟(

*/45 * * * * /path/to/script1

(每隔25分钟,依此类推(

*/25 * * * * /path/to/script2 

等等

相关内容

最新更新