【问题标题】:Python - ssh and sftp through a middle computerPython - 通过中间计算机的 ssh 和 sftp
【发布时间】:2015-12-17 04:26:06
【问题描述】:

设备 1 通过我的网络连接到设备 2。设备 2 也连接到设备 3,它不直接连接到设备 1。从设备 1,我希望能够将文件发送到设备 2 或设备 3。

目前,我正在使用 paramiko 建立 ssh 连接,然后使用 sftp 将文件从设备 1 放到设备 2 上。这不是问题。

使用设备 2 作为中间人将文件传输到设备 3 的最佳方式是什么?我知道我可以复制到设备 2,然后以某种方式再次复制到设备 3,但这似乎效率低下。我应该如何将设备 1 链接到设备 3,以便我可以简单地使用 sftp.put()

我无法更改网络配置,所以请不要建议。

【问题讨论】:

  • 我会看看Fabric
  • 有什么特定于 Fabric 的东西可以帮助我吗? @威尔伯
  • 嗯,我个人不知道有一种方法可以使用 python 将设备 1 直接链接到设备 3,所以如果你创建了一个复制文件的结构任务,你可以在设备 1 上运行它目的地为设备 2,随后在设备 2 上,目的地为设备 3。抱歉,我现在想不出更优雅的方法
  • 谢谢,我不知道面料,但同样的想法基本上是我的备份。我认为有一些方法可以设置隧道。希望它能与 paramiko 很好地集成

标签: python ssh sftp paramiko


【解决方案1】:

您应该使用 SSH 隧道, 有不同的选择:

  1. sshtunnel: pip install sshtunnel
  2. 使用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)

【讨论】:

  • 正是我想要的。在回应威尔伯之前,我没想过挖隧道。感谢您的帮助
  • 确认一下,在你的例子中server 是什么?只是[hostname, port]?你的例子没有建立隧道吗? @Ali Nikneshan
  • 服务器 = (Device2,Port2)。查看完整示例的链接,我只是提取有趣的部分。
猜你喜欢
  • 2010-10-01
  • 2017-02-22
  • 2014-07-22
  • 1970-01-01
  • 2012-08-28
  • 2021-09-28
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多