2016-07-27 78 views
0

我需要在遠程主機之間執行rsync(原因稍後),rsync不支持(請參見手冊頁)。不過,我認爲應該可以使用ssh隧道。我目前無法實現它,我認爲我做錯了什麼。看看下面的代碼片段:兩個遠程之間的Rsync

ssh -R localhost:50000:remotesource:22 [email protected] -f -N 
sleep 5 #To wait for the tunnel to establish 
ssh [email protected] rsync -e "ssh -p 50000" --progress --append-verify [email protected]:~/sourcefiles ~/destdir' 

這基本上在rsync內部ssh的驗證過程中掛起。只是爲了測試它,我連接到遠程目標,並試圖SSH通過隧道remotesource和工作!有沒有什麼rsync做不同的事情,我忘了這裏?

爲什麼我要這樣做?儘管一般的好奇心在於remotesource是一臺計算機,我只能從中拉出數據,而遠程目標只有一個共享帳戶。由於存在頻繁的連接問題,我想寫一個腳本來在發生錯誤時重新啓動rsync。爲此,我需要通過密鑰文件進行身份驗證(沒有安裝sshpass或類似軟件)。但我絕對不會將我的私鑰存儲在共享帳戶的主目錄中。因此,我想通過本地PC進行身份驗證。

我希望有人能指出我的錯誤,我沒有看到它:-)謝謝!

回答

1

我想你已經把自己綁在這裏了!

創建端口轉發到端口22的唯一時間有助於在防火牆周圍進行路由。它不能幫助您避免身份驗證。在任何情況下,你的隧道只接受來自在「localpc」上運行的進程的連接,這樣你在「遠程目標」上運行的rsync就不能使用它。

如果您不希望將憑據泄漏到「遠程目標」上的共享帳戶,並且交互式密碼輸入不可行,那麼情況就有點棘手。您可以使用受authorized_keys限制的密鑰,但這仍然不完全安全。您可以使用ssh -A將您的ssh-agent連接轉發到「remotedestination」,但具有相同用戶訪問權限的竊聽者也可以使用該套接字(如果您實際上並不是真正面對真正黑客的間諜,則此方法至少相當隱蔽) 。

也許最安全的方法是使用ssh -A代理轉發啓動從「remotesource」的轉移。

或者,如果數據不是很大或增量更新不是該點,則可以嘗試scp。這可以處理遠程源和目標,甚至可以將數據直接從源直接移動到目標(如果可以)。缺點是它會一直試圖複製所有的數據。

+0

我明白了,那很不幸。我會考慮這一點。關於數據量,我們正在談論幾個TB,這就是爲什麼我需要rsync能夠在連接丟失後恢復。 – Alex

+0

我個人對這個問題的解決方案是編寫一個小小的expect腳本來輸入密碼,就像我輸入密碼一樣。 – ams

+0

沒有安裝sshpass,那麼你會怎麼做? – Alex