bash – 使用变量提供密码成为Jenkins中的sudo用户

我有一个jenkins工作,它有自己的构建服务器集.我遵循的过程是在jenkins构建服务器上构建应用程序,然后我使用“通过ssh发送文件或执行命令”来复制我的构建并使用
shell脚本部署它.

作为部署命令的一部分,我有很多步骤要做,比如mkdir,tar -xzvf等.我想用特定用户“K”执行这些部署步骤.但是当我键入sudo su – k命令时,jenkins作业失败,因为我无法将密码提供给它.

#!/bin/bash
sudo su - K << \EOF
cd /DIR1/DIR2;
cp ~/MY_APP.war .
mkdir DIR 3
tar -xzvf MY_APP.war
EOF

为了解决这个问题,我使用了一个PASSWORD参数并将构建作为参数化,这样我就可以在shell脚本中使用相同的PASSWORD.

我曾尝试使用Expect,但看起来像cd,tar -xzvf之类的命令在它内部不起作用,即使它们工作也不会以K作为用户执行,因为终端可能会过期(如果错误请更正).

export $PASSWORD
/usr/bin/expect << EOD
spawn sudo su - k
expect "password for K"
send -- "$PASSWORD"
cd /DIR1/DIR2;
cp ~/MY_APP.war .
mkdir DIR 3
tar -xzvf MY_APP.war
EOD

注意:我没有对服务器的root访问权限,因此无法调整主机密钥文件.这个问题有解决方法吗?

最佳答案 即使你让它工作,从安全的角度来看,在脚本或命令行中使用密码可能并不理想.我建议两件事:

1)在启动系统上使用用户拥有的公共SSH密钥作为远程系统上的授权密钥,以允许在没有密码的情况下以远程系统上的目标用户身份登录.您应该拥有所需的一切(不需要root访问权限,仅限于您已在每个系统上使用的用户).

2)在远程系统上设置“sudoers”文件,以便您登录的用户可以执行所需的用户命令.您需要系统管理员帮助.

点赞