我想在本地运行一个脚本,通过 ssh 在多个远程主机上调用“sudo ./up”。
./up 很简单:
---- /home/user/up ----
#!/bin/bash
sudo apt update && sudo apt -y upgrade
-----------------------
所有主机上的用户名都是“用户”,并且用户已经被授予 sudoers 权限(在所有主机上)来调用该脚本。
密钥是 ssh 添加的,我通常在 ssh 到另一台主机时不需要输入任何密码。
我可以通过以下方式从终端执行此操作:
ssh 用户@remotehost1 sudo ./up
ssh 用户@remotehost2 sudo ./up
ETC
但是,当我尝试将命令放在脚本中时,远程调用失败,因为我被要求输入 root@remotehost 的密码(而且我不仅不想使用 root,而且“用户”已经有权在没有密码的情况下执行该脚本)
即:这有效:
(在 konsole 中输入)
ssh user@remotehost1 sudo ./up
ssh user@remotehost2 sudo ./up
然而这失败了:
--- /home/user/up ---
#!/bin/bash
sudo ./up # does work, as expected
ssh user@remotehost1 sudo ./up # fails with password query
ssh user@remotehost2 sudo ./up # fails with password query
---------------------
这也失败了
--- /home/user/up ---
#!/bin/bash
sudo ./up # does work, as expected
ssh user@remotehost1 sudo --user user ./up # fails with password query
ssh user@remotehost2 sudo --user user ./up # fails with password query
---------------------
并且失败我的意思是它暂停查询密码而不是完成和退出:
user@localhost:~$ sudo ./up
root@remotehost1's password:
- - - - 解决了 - - - -
---- /home/user/update ----
#!/bin/bash
sudo ./up
ssh host1 sudo ./up
ssh host2 sudo ./up
---- /home/user/up (on all machines) ----
#!/bin/bash
#user ALL=(ALL) NOPASSWD: /home/user/up
#
sudo apt update && sudo apt -y upgrade
[[ -f /var/run/reboot-required ]] && echo -ne "\\n\033[1;31m====== $HOSTNAME REBOOT REQUIRED =======\033[0m\\n"
[[ -f /var/run/reboot-required.pkgs ]] && cat /var/run/reboot-required.pkgs
echo "================ FINISHED ================"
然后只需在终端中执行 ./update
多哈。谢谢Ginnungagap。