输入远程运行脚本的 sudo 密码

输入远程运行脚本的 sudo 密码

我正在尝试开发一个脚本来升级本地网络上的虚拟机。目标是让每个虚拟机下载脚本然后执行它。

我已经能够使用curl下载脚本并执行,但仍然收到输入sudo密码的提示。

这有效:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | sudo sh'

但当到达 sudo 命令时,我仍然需要再次输入密码。

我尝试过:

sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | echo 'password' | sudo sh'

会出现以下提示:

[sudo] password for aaron: (23) Failed writing body

我该怎么做才能将密码传递到 sudo 密码提示符?

答案1

基本上有多种选择,每种选择都有其优点和缺点。这在一定程度上取决于您的网络的“本地”程度以及您的解决方案的耐用性。

  1. 无密码 sudo。允许用户在目标计算机上使用无密码 sudo。要么适用于所有内容(put "nameofuser ALL=(ALL) NOPASSWD: ALL在目标计算机上/etc/sudoers使用),要么仅允许特定命令。visudo请注意,有权访问nameofuser目标计算机的每个人实际上都具有该计算机上的 root 访问权限(并非如 @terdon 在评论中建议的那样,该计算机上的每个人都具有 root 访问权限)。

  2. 允许控制计算机上的用户以 root 身份 ssh 到目标计算机。将控制用户的公钥放入authorized_keys目标计算机上的文件中。这意味着控制计算机上的特定用户拥有所有虚拟机的 root 访问权限。

  3. 看看 Ansible(或 Puppet、Chef 等)。他们已经或多或少地为你解决了这个问题。 Ansible 的学习曲线比较温和(不到一天的时间您就可以实际使用它)。

如果问题持续时间较长,请选择选项 3。如果只是您自己的本地网络进行试验,则选择选项 1 或选项 2。

相关内容