2012-05-29 43 views
2

我有使用下面的命令在遠程主機上創建的文件夾的科恩88外殼腳本:不關閉的ssh

ssh [email protected]$host "mkdir -p $somedir" 2>> $Log 

,之後傳送使用該

scp -o keepalive=yes $somedir/$file [email protected]$host:$somedir 
在一個循環一堆文件

我不知道第一個命令是否會在腳本結束後打開連接?

+0

它不會。你可以使用'ps'或'top'來檢查它。 – cnicutar

+1

'man rsync' ... –

回答

3

每個命令打開和關閉自己的連接。使用像tcpdump這樣的工具很容易驗證這一點。

這是由於用於終止進程的系統調用關閉了所有打開的文件描述符(包括套接字文件描述符)這一事實的結果。關閉套接字會關閉套接字後面的連接。

+0

這意味着如果我有10個文件要傳輸,我將在腳本執行期間打開和關閉10 + 1 = 11個連接......是否有更有效的方法來執行此操作? – Dima

+0

有許多方法可以在單個連接上覆制一堆文件。一個很好的選擇是[rsync](http://linux.die.net/man/1/rsync)(請參閱William Pursell的評論)。另外,scp可以複製多個文件,請參閱[man scp](http://linux.die.net/man/1/scp)。 –

3

新版本的ssh能夠在單個物理連接上覆用多個虛擬連接。所以你可以做的是在後臺啓動一些長時間運行的ssh命令,啓用連接複用,然後後續連接將以更快的啓動時間重新使用該連接。有關連接複用的信息,請參閱ssh_config的手冊頁,相關選項爲ControlMasterControlPath

但正如William Pursell所建議的,如果是選項,rsync可能更簡單快捷。