Python - 通过中间计算机的 ssh 和 sftp
Python - ssh and sftp through a middle computer
设备 1 通过我的网络连接到设备 2。设备 2 也连接到设备 3,后者未直接连接到设备 1。我希望能够从设备 1 向设备 2 或设备 3 发送文件。
目前,我正在使用 paramiko 建立 ssh 连接,然后使用 sftp 将文件从设备 1 放到设备 2 上。这不是问题。
使用设备 2 作为中间人,将文件传输到设备 3 的最佳方法是什么?我知道我可以复制到设备 2,然后以某种方式再次复制到设备 3,但这似乎效率不高。我应该如何将设备 1 链接到设备 3,以便我可以简单地使用 sftp.put()
?
我无法更改网络配置,所以请不要建议。
您应该使用 SSH 隧道,
有不同的选择:
- sshtunnel:
pip install sshtunnel
- 使用 para 作为转发器端口: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)
设备 1 通过我的网络连接到设备 2。设备 2 也连接到设备 3,后者未直接连接到设备 1。我希望能够从设备 1 向设备 2 或设备 3 发送文件。
目前,我正在使用 paramiko 建立 ssh 连接,然后使用 sftp 将文件从设备 1 放到设备 2 上。这不是问题。
使用设备 2 作为中间人,将文件传输到设备 3 的最佳方法是什么?我知道我可以复制到设备 2,然后以某种方式再次复制到设备 3,但这似乎效率不高。我应该如何将设备 1 链接到设备 3,以便我可以简单地使用 sftp.put()
?
我无法更改网络配置,所以请不要建议。
您应该使用 SSH 隧道, 有不同的选择:
- sshtunnel:
pip install sshtunnel
- 使用 para 作为转发器端口: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)