car*_*tor 2 linux bash mac-osx sudo
我需要循环和 ssh 到多个主机并在每个主机上运行一系列命令。
就像是:
for i in $(jot -w '%02.0f' 14 1)
>do ssh user@host$i sudo -i "command1; command2; command3"
>done
Run Code Online (Sandbox Code Playgroud)
但我无法让它正常工作。我在 Google 上看到了各种各样的东西,比如sudo sh -c管道到 sudo 等,但无法弄清楚。
; jot -w,这大致相当于seq -f在 linux 中提前致谢!
尝试通过 ssh 传递带引号的命令字符串始终是一个挑战。你没有提到你收到什么样的错误消息,但这里有一些想法:
许多系统上的默认 sudo 配置要求您的会话具有与之关联的有效 TTY。这需要 (a) 使用“-t”选项调用 ssh,或 (b) 从 sudo 配置中删除“requiretty”选项。
这对我有用(目标是一组 RHEL5 系统):
for i in 0 1; do
ssh -t host$i sudo -i "echo one; echo two; echo 'three four'"
done
Run Code Online (Sandbox Code Playgroud)
这导致:
one
two
three four
Connection to host0 closed.
one
two
three four
Connection to host1 closed.
Run Code Online (Sandbox Code Playgroud)
如果您经常这样做,有多种工具可以让您的生活更轻松:
等等。我自己通常只使用 shell 脚本。
我发现引用正确是很烦人的。相反,我倾向于通过管道将命令传递给远程主机上的 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
Run Code Online (Sandbox Code Playgroud)
哪个返回
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21196 次 |
| 最近记录: |