我需要从在 Windows 机器上运行的 TeamCity 在远程 Linux 机器上以 sudo 身份执行 bash 脚本。我可以使用 plink 从 cmd 行顺利执行脚本,但系统提示我输入密码。我需要能够在不提示输入密码的情况下执行此操作,以便从 teamcity 执行。
我有什么选择?
答案1
您需要sudo
在要运行脚本的主机上编辑配置。visudo
以 root 身份运行并添加如下行:
USERNAME ALL=(ALL) NOPASSWD: ALL
替换USERNAME
为要运行脚本的用户。这应该允许用户在sudo
不输入密码的情况下使用。您可能希望将使用限制sudo
在您实际需要的命令上。查看 sudoers 中的visudo
示例,了解如何实现这一点。
答案2
如果两个系统都是安全的,您可以使用如下方法:
echo 'sudo_password' | sudo -S command
此选项必须小心使用,因为它使用明文密码,登录该机器的其他用户可能会看到它。
答案3
一个选项是直接允许 ssh 访问机器的 root 帐户。您应该使用私钥锁定它,并且可能用密码保护该密钥。将以下内容添加到您的 sshd_config 中:
PermitRootLogin yes
Match User root
PasswordAuthentication no
如果采用这种方式,则可以通过command=""
在 ~root/authorized_hosts 文件中添加以下内容来让此密钥运行特定的命令脚本,而不管指定了什么,例如
command="/root/myscript" ssh-rsa AAAB3NzaC1yc2EAAAABIwAAADV4//KSz...