使用ssh执行Unix命令列表

时间:2011-03-14 23:36:02

标签: linux shell unix

我想在多台机器上运行相同的Unix命令集。我知道ssh和下面的东西。我想编写一个shell脚本来执行此操作。我可以访问bash和ksh,而且我在Linux Red Hat 5上。

ssh root@ip "echo \$HOME"

但是,我有两个问题:

  1. 我不断收到提示输入密码的提示。如何让它不提示我并自动输入密码?
  2. 如何执行多个命令?

3 个答案:

答案 0 :(得分:7)

  1. 您应该使用key based authentification,可能与ssh-agent结合使用以记住密钥密码。

  2. 您可以调用sh -c作为命令,并向其传递一个包含要执行的命令列表的字符串。 ssh在远程计算机上调用shell ,因此您可以将命令列表作为字符串传递。

  3. 例如:

    $ ssh user@ip "echo 'Hello world'; whoami; cd / ; ls"
    

答案 1 :(得分:1)

使用ssh-agent为所有命令设置身份验证。或者将多个命令放入一个shell脚本中。

答案 2 :(得分:0)

  1. 将命令列表发送到远程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
      '
      
  2. 注意:在相应的语句中使用"'不一定会导致错误。虽然你可能会得到意想不到的结果。