Linux

ssh 到多個主機和 sudo 多個命令

  • May 2, 2015

我需要遍歷並 ssh 到多個主機並在每個主機上執行一系列命令。

就像是:

for i in $(jot -w '%02.0f' 14 1)
>do ssh user@host$i sudo -i "command1; command2; command3"
>done

但我無法讓它正常工作。我在 Google 上看到過各種各樣的東西,比如sudo sh -csudo 等,但無法弄清楚。

  • 我作為普通使用者使用 ssh,無需密碼即可 sudo(未啟用 ssh 作為 root)
  • command1 不返回 0 不應阻止 command2 執行等,因此;
  • 我正在從 mac 執行循環,因此jot -w,這大致相當於seq -f在 linux 中
  • SSH 到 CentOS 5.4
  • 我希望它與 root 的 $PATH 一起執行,所以我不必指定命令的完整路徑,但這不是完全必要的

提前致謝!

我發現正確引用是很煩人的。相反,我傾向於通過管道將命令傳遞給遠端主機上的 bash。這樣您就不必擔心在 ssh 命令行中正確轉義。如果您以互動方式連接,只需將您輸入的內容準確地傳遞到管道中。

CMDS="sudo bash -c '/usr/bin/id; /usr/bin/id; '/usr/bin/id"
for i in 0 1; do
 echo $CMDS | ssh -t host$i bash
done

哪個返回

uid=0(root) gid=0(root) groups=0(root)
uid=0(root) gid=0(root) groups=0(root)
uid=0(root) gid=0(root) groups=0(root)

引用自:https://serverfault.com/questions/203163