Ssh
在腳本中連結 ssh 更新命令失敗
我想在本地執行一個腳本,通過 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。
您正在使用包含 sudo 命令本身的 sudo 呼叫腳本。
實際上,您所做的類似於
sudo bash -c "sudo apt update && sudo apt -y upgrade"
.第一個 sudo 工作正常,其他的不是那麼多。但是,它們完全沒有意義,因此請擺脫它們。
./up
自從呼叫作為它的第一個命令以來,您也有一個無限循環./up
,但我假設這是混淆超級騙子秘密腳本名稱的結果。