我想在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
等等