2015-03-31 146 views
0

我有一個我可以通過SSH連接的40個服務器的列表。我想要做的是登錄到他們每個人,並創建一個目錄,並將我的機器上的一個文件複製到所有40臺服務器機器上。我編寫了這段代碼,但它只是打開一個窗口並關閉它。多個SSH到遠程服務器+多個遠程命令

#!/bin/bash 

filename="$1" 
while read -r line 
do 
    name=$line 
    gnome-terminal -e "ssh -t -t [email protected]$name -i ~/.ssh/id_rsa && mkdir test && scp client_google.py [email protected]$name:/home/xyz/test" 
    #sleep 5s 
    echo "Name read from file - $name" 
done < "/home/papps/nodes.txt" 

Nodes.txt包含服務器的40個IP地址列表。

注意:在上面提到的代碼中,我收到警告,指出身份文件不可用(id_rsa)。請幫忙,我哪裏錯了?謝謝。

+0

你爲什麼使用'gnome-terminal'?而且你沒有在遠程機器上運行'mkdir'。 – Biffen 2015-03-31 09:11:44

+0

gnome-terminal打開新窗口(不是必需的?) 是的,我知道mkdir在我的代碼中沒有意義,但我該如何糾正? – Papps 2015-03-31 09:30:33

+0

如果您確實需要新窗口,請繼續。但它當然沒有必要。 'ssh xyz @ $ name mkdir test'應該足夠了。 – Biffen 2015-03-31 09:40:28

回答

0

ssh應該提供命令以通過其標準輸入遠程執行。看看下面的方法:

#!/bin/bash 

filename="$1" 
while read -r line 
do 
    name=$line 
    gnome-terminal -e "ssh -t -t [email protected]$name -i ~/.ssh/id_rsa -n 'mkdir ~/test' && scp client_google.py [email protected]$name:/home/xyz/test" 
    #sleep 5s 
    echo "Name read from file - $name" 
done < "/home/papps/nodes.txt" 
+0

沒有工作。我應該只使用'-i'而不是'-i〜/ .ssh/id_rsa'嗎?無論哪種方式,窗戶只是打開空白,關閉。 :( – Papps 2015-03-31 09:42:50

+0

不,這是一個錯誤,必須提供私鑰文件。試試我的更新。 – 2015-03-31 10:40:46

0

SFTP比純SSH更好的操縱遠程文件。像這樣的東西應該工作:

#!/bin/bash 
filename="$1" 
while read -r line 
do 
    name=$line 
    gnome-terminal -e "{ 
      echo mkdir test 
      echo put client_google.py test/client_google.py 
     } | sftp -b - -i ~/.ssh/id_rsa [email protected]$name" 
    echo "Name read from file - $name" 
done < "/home/papps/nodes.txt" 

sftp -b - -i ~/.ssh/id_rsa [email protected]$name SFTP發佈運行在批處理模式下,從標準輸入讀取(-b - )。兩個echo命令將輸入​​提供給SFTP程序。在批處理模式下,如果mkdir命令失敗,sftp將會退出。