2011-03-14 142 views
1

我想在多台机器上运行同一套Unix命令。我知道ssh和下面的东西。我想写一个shell脚本来做到这一点。我访问的bash和ksh,我在Linux上的Red Hat 5使用ssh执行Unix命令列表

ssh [email protected] "echo \$HOME" 

不过,我有2个问题:

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

回答

7
  1. 你应该使用key based authentification,可能加上ssh-agent要记住关键密码。

  2. 您可以调用 sh -c作为该命令,并向它传递一个包含要执行的命令列表的字符串。 ssh在远程机器上调用一个shell,所以你可以传递一个命令列表作为一个字符串。

例如:

$ ssh [email protected] "echo 'Hello world'; whoami; cd/; ls" 
+0

谢谢,这些信息看起来很有帮助。但是,即使在机器1上生成密钥并将其添加到机器2之后,仍然会提示输入密码。你有什么想法吗?这里是我做的: 1.)machine1:ssh-keygen 2.)machine1:ssh-copy-id -i .ssh/id_rsa.pub user @ ip – Matt 2011-03-15 01:25:59

+0

您现在需要启动ssh-agent并使用ssh-add将其添加到您的钥匙串,以防止未来的密码提示。 – MikeK 2011-03-15 13:14:45

+0

请注意,每次登录时都需要这样做。你也可以创建一个没有密码的ssh密钥,但要注意安全隐含性(每个可以读取私钥的人都可以不用密码连接)。 – 2011-03-15 13:49:38

1

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

0
  • 发送的命令列表的远程外壳。可能的解决方案:

    • 使用",逃生换行符格式化代码和结束每个子语句与;
      缺点:"应该不是在命令列表中使用。

      ssh [email protected] "\ 
          echo 'Hallo sir, how are you doing?';\ 
          whoami;\ 
          cd /;\ 
          ls\ 
      " 
      
    • 使用'并使用常规换行符格式化代码。
      缺点:'应该而不是在命令列表中使用。

      ssh [email protected] ' 
          echo "Hallo sir, how are you doing?" 
          whoami 
          cd/
          ls 
      ' 
      
  • :使用相应的语句内"'不一定会导致错误。虽然你可能会得到不明的结果。