python-2.7 - 如何使用paramiko在python脚本中给出sftp代理命令?

标签 python-2.7 proxy sftp paramiko pysftp

我想使用 paramiko 在 python 中使用代理命令。

代理命令:

sftp -o "ProxyCommand /usr/bin/nc --proxy proxy.somegateway.com:8080 %h %p"

但是当我直接使用它时,我能够连接sftp服务器。

但是如果我想在 Python 脚本中使用此代理命令,我会遇到以下问题:

我的脚本:

>>> import paramiko
>>> cmd = '/usr/bin/ssh proxy.somegateway.com:8080'
>>> proxy = paramiko.ProxyCommand(cmd)
>>> proxy
<paramiko.proxy.ProxyCommand object at 0x23b3bd0>
>>> client = paramiko.SSHClient()
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect(hostname='some.host.com', username='myuser', password='secretpassword', sock=proxy)
No handlers could be found for logger "paramiko.transport"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 366, in connect
    t.start_client(timeout=timeout)
  File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 510, in start_client
    raise e
paramiko.ssh_exception.ProxyCommandFailure: ('/usr/bin/ssh proxy.somegateway.com:8080', 'Broken pipe')

我遇到 ProxyCommandFailure 问题。

最佳答案

应该是这样的:

target_host = 'sftp.foo.com'
target_port = 22
proxy = paramiko.proxy.ProxyCommand(
    '/usr/bin/nc --proxy proxy.bar.com:8080 %s %d' \
    % (target_host, target_port) )
client.connect(hostname=target_host, port=target_port, password='...', sock=proxy)
#                                                                      ^^^^^^^^^^

参见 paramiko 的 doc了解详情。

关于python-2.7 - 如何使用paramiko在python脚本中给出sftp代理命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46987727/

相关文章:

c# - WinSCP .NET 程序集在处理中可以抛出哪些异常类型

python - ffplay 显示运行时错误,但仍然播放文件

python - 根据选择字段中的值对 Django 查询集进行排序

python - 是否检查编写的代码是否在 python 2.7 或 3 及更高版本中?

Linux 代理,如何确保 linux 使用我的代理设置

python - 我怎样才能最轻松地通过 python 的 TLS 代理命令制作 TLS?

Python 将日语单词存储到 JSON 文件中

python - 在 python 中加密到我的 HTTP 代理的连接

java - Apache Mina SFTP SftpSubsystem.Factory()

.net - 使用 WinSCP 和 PowerShell 上传文件之间暂停