2015-12-16 72 views
0

設備1通過我的網絡連接到設備2。設備2也連接到設備3,它不直接連接到設備1.從設備1,我想能夠發送文件到設備2或設備3.Python - 通過中間計算機的ssh和sftp

目前,我使用paramiko建立一個ssh連接,然後使用sftp將這些文件放在Device 1的Device 2上。這不是問題。

將設備2作爲中間人傳輸文件到設備3的最佳方式是什麼?我知道我可以複製到設備2,然後以某種方式再次複製到設備3,但這似乎效率低下。我應該如何去連接設備1到設備3,所以我可以簡單地使用sftp.put()

我無法更改網絡配置,因此請不要提示。

+0

我會看看[Fabric](http://www.fabfile.or g) – wpercy

+0

織物有什麼特別的東西可以幫助我嗎? @wilbur – Shatnerz

+0

嗯,我個人不知道一種方法,你可以直接將Device 1與Python連接到Device 3,所以如果你創建了一個複製文件的結構任務,你可以在設備1上運行它,目的地爲Device 2,然後在設備2上將目的地設置爲設備3.對不起,我現在想不到更優雅的方式來執行此操作 – wpercy

回答

2

你應該使用SSH隧道, 有不同的選擇:

  1. sshtunnelpip install sshtunnel
  2. 使用對作爲轉發端口:https://github.com/paramiko/paramiko/blob/master/demos/forward.py

樣品:

client = paramiko.SSHClient() 
client.load_system_host_keys() 
client.set_missing_host_key_policy(paramiko.WarningPolicy()) 

try: 
    client.connect(server[0], server[1], username=options.user, key_filename=options.keyfile,   look_for_keys=options.look_for_keys, password=password) 
+0

正是我在尋找的。在迴應威爾伯之前,我沒有想到隧道效應。感謝您的幫助 – Shatnerz

+0

只要確認,您的示例中的「服務器」是什麼?只是'[主機名,端口]'?你的例子並沒有建立隧道嗎? @Ali Nikneshan – Shatnerz

+1

server =(Device2,Port2)。檢查完整示例的鏈接,我只是提取有趣的部分。 –