2015-06-25 75 views
0

我經常必須通過ssh使用多跳連接到多個系統。這也經常發生,我希望將文件從目標系統複製到本地系統或以其他方式以簡單的方式複製(我目前的工作流程是將文件複製到外部位置,這兩臺計算機都可以看到,以便它節省了我幾跳,或者如果該文件不是二進制貓,並將其複製/粘貼到另一個終端窗口)。 有沒有一種簡單的方法來做這樣的事情?scp在兩個終端窗口(或多跳scp)之間

我使用OSX和iterm2(顯然我不會介意改變後者)。

那麼連接是一樣的東西(本地計算機) - >(門戶) - >(B機) - >(門戶C) - >(機d)

所以我想從複製文件機器A以簡單的方式加工D(無需通過所有中繼複製文件或創建四個通道)。

+0

不幸的是我認爲你有唯一的選擇。不確定任何更簡單的方法,然後使用兩臺機器都可以訪問的外部位置。我一直遇到這個問題,最終做了多個隧道。 –

回答

0

這不是你要的東西,但有一些技巧,你可以使用SSH代理來簡化這種事情極大。首先要熟悉的是通過netcat代理多跳SSH連接。如果您有關於的OpenSSH的各個主機5.4版本或更高版本,添加這樣的事情你的〜/ .ssh /配置:

Host B 
    ProxyCommand ssh A -W %h:%p 

Host C 
    ProxyCommand ssh B -W %h:%p 

Host D 
    ProxyCommand ssh D -W %h:%p 

如果任何中間體沒有一個足夠新的版本,但確實有netcat的(nc),你可以使用這樣的事情,而不是:

Host D 
    ProxyCommand ssh C nc %h %p 

這會讓ssh D自動打開隧道到C地跑過來的連接,它會自動打開一個隧道,B,......你必須驗證4次(對A,然後B等)(除非你設置了公鑰認證),但除此之外它是透明的。這意味着你可以使用它sftp D,scp D:/path/to/file

現在,這對你所描述的有一個顯着的限制。你當然可以從例如A到d這樣的:

scp A:/path/to/file D:/path/to/file 

...但該文件的內容將前往路徑A - >計算機 - > A - >乙 - >ç - > D.他們不會在任何地方存儲那個路徑,但是如果你和A之間的網絡連接很慢(例如你在家工作),這將是一個瓶頸。在這種情況下,最好將C和D的〜/ .ssh/config項複製到計算機A上,正常情況下ssh進入A,然後使用scp /path/to/file D:/path/to/file並剪掉額外的跳躍。

順便說一句,如果你想獲得幻想,你可以添加到您的〜/ .ssh /配置:

Host */* 
    ProxyCommand ssh $(dirname %h) -W $(basename %h):%p 

然後用ssh A/B/C/D等內置隧道路徑上的點。有關詳細信息,請參閱the OpenSSH cookbook

0

我不得不思考這一段時間,但如果你使用的密鑰設置了密碼認證,可以做這樣的事:

$ cat test | ssh f21 "tee | ssh f20 \"tee test\"" 

加密的SSH密鑰無所謂。對於通過單跳傳輸來說,這是非常簡單的,對於更多的跳躍它可能會變得混亂...