【发布时间】:2011-03-14 23:36:02
【问题描述】:
我想在多台机器上运行相同的 Unix 命令集。我知道 ssh 和下面的内容。我想写一个shell脚本来做到这一点。我可以访问 bash 和 ksh,而且我使用的是 Linux Red Hat 5。
ssh root@ip "echo \$HOME"
但是,我有两个问题:
- 我不断收到输入密码的提示。如何让它不提示我并自动输入密码?
- 如何执行多个命令?
【问题讨论】:
我想在多台机器上运行相同的 Unix 命令集。我知道 ssh 和下面的内容。我想写一个shell脚本来做到这一点。我可以访问 bash 和 ksh,而且我使用的是 Linux Red Hat 5。
ssh root@ip "echo \$HOME"
但是,我有两个问题:
【问题讨论】:
您应该使用key based authentification,可能还要加上ssh-agent 来记住密钥密码。
你可以调用sh -c作为命令,并传递一个包含要执行的命令列表的字符串。ssh调用远程机器上的一个shell,所以你可以将命令列表作为字符串传递。
例如:
$ ssh user@ip "echo 'Hello world'; whoami; cd / ; ls"
【讨论】:
sh -c 部分,ssh 无论如何都会启动一个shell。事实上,不要使用sh -c,因为它需要另一个级别的引用(@Sylvain:您的命令不起作用,因为您没有添加额外级别的引用)。
使用 ssh-agent 为所有命令设置身份验证。或者将您的多个命令放入一个 shell 脚本中。
【讨论】:
向远程 shell 发送命令列表。可能的解决方案:
使用",转义换行符以格式化代码并以;结束每个子语句。
缺点:" 应该不在命令列表中使用。
ssh user@ip "\
echo 'Hallo sir, how are you doing?';\
whoami;\
cd /;\
ls\
"
使用' 并使用常规换行符格式化代码。
缺点:' 应该不在命令列表中使用。
ssh user@ip '
echo "Hallo sir, how are you doing?"
whoami
cd /
ls
'
注意:在各自的语句中使用" 或' 不一定会导致错误。虽然你可能会得到意想不到的结果。
【讨论】: