2015-11-13 49 views
1

我想通過SSH發送幾個shell命令到服務器。目前,這看起來像下面這樣:如何在不每次打開新連接的情況下通過SSH發送shell命令?

echo "copy file on server" 
ssh [email protected] "cp file1 file2" 

echo "rename file on server" 
ssh [email protected] "mv file2 file3" 

echo "generate folder on server" 
ssh [email protected] "mkdir files" 

echo "syncing files to server" 
rsync ... 

echo "do some other stuff" 
ssh [email protected] "touch filex" 

這樣做了幾次之後,因爲我有太多打開的連接/打開連接太多我被列入黑名單。

有沒有辦法避免列入黑名單(例如打開單個SSH句柄,發送命令,並再次關閉句柄)?

問題是,某些命令需要在本地執行(例如,rsync命令),而其他命令需要在服務器上執行。這兩種命令混合在一起。

+0

爲什麼不用ssh用戶@服務器ssh進入服務器?然後執行這些命令,並再次退出服務器? – maikovich

+0

有一個步驟,我想從我的本地機器到服務器'rsync'文件。如果有一種方法可以告訴rsync「從啓動SSH連接的本地計算機的工作目錄中獲取文件」,那很好。 –

+0

默認情況下,本地計算機上的rsync將使用SSH將文件傳輸到遠程主機。 –

回答

1

如果這是一個事先知道的命令序列,一個非常簡單的解決方案是使用序列「& &」運算符。

1

我喜歡做這樣的:

cat <<eot | ssh [email protected] bash 
cp /tmp/a /tmp/b 
mv /tmp/b /tmp/c 
#etc 
eot 
1

您可以執行下列操作之一:

SCP run.sh targethost:/ tmp目錄/。 ssh targethost /tmp/run.sh

ssh targethost'cmd1; CMD2; CMD3'

SSH targethost 'CMD1 & & CMD2 & & CMD3'

我有時會建議複製一個腳本,如果它是一個複雜的操作。此外,使用邏輯與更好,然後只是發出多個命令,如果一個依賴於另一個,即在刪除文件之前更改目錄等。

相關問題