2011-03-14 138 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 
      ' 
      
  • :使用相應的語句內"'不一定會導致錯誤。雖然你可能會得到不明的結果。