pysft,paramiko,grequests:读取SSH协议横幅时出错

时间:2015-12-15 11:51:30

标签: python paramiko pysftp

我正在尝试从ipython会话中打开SFTP连接。不过我的代码

import grequests
import pysftp

sftp = pysftp.Connection(
'ftp.server.com',
port=2255,
username='myname',
private_key='/Users/myname/.ssh/rsa') 

加注

Traceback (most recent call last):
  File "/Users/myname/reporting-python/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 3066, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-11-82bba0e75aee>", line 5, in <module>
    private_key='/Users/myname/.ssh/rsa') # TODO: adjust key path
  File "/Users/myname/reporting-python/lib/python2.7/site-packages/pysftp.py", line 187, in __init__
    self._transport.connect(username=username, pkey=prv_key)
  File "/Users/myname/reporting-python/lib/python2.7/site-packages/paramiko/transport.py", line 1072, in connect
    self.start_client()
  File "/Users/myname/reporting-python/lib/python2.7/site-packages/paramiko/transport.py", line 492, in start_client
    raise e
SSHException: Error reading SSH protocol bannerThis operation would block forever

从OSX终端连接到服务器没有问题:

sftp -oPort=2255 -oUser=myname -oPubkeyAuthentication=yes -oIdentityFile=/Users/myname/.ssh/rsa ftp.server.com

我已经尝试在transport.py中将横幅超时从15秒更改为60秒,但它没有解决问题。

paramiko.SSHException: Error reading SSH protocol banner建议检查横幅,但我无法弄清楚如何使用这些信息来解决问题。

更新

似乎问题是由导入包 grequests 引起的。如果我不导入grequests,pysftp按预期工作。该问题已提出before,但尚未解决。

3 个答案:

答案 0 :(得分:0)

我使用String colName = CellReference.convertNumToColString(colIdx) 连接SFTP服务器的方式如下所示。

paramiko

我之前尝试使用from paramiko.client import SSHClient from paramiko import AutoAddPolicy client = SSHClient() client.set_missing_host_key_policy(AutoAddPolicy()) client.connect(hostname=host, port=port, username=username, password=password) sftp_handle = client.open_sftp() ,但pysftp证明功能更强大,更易于使用大量文档。如果有帮助,请告诉我。

答案 1 :(得分:0)

作为你的回答:“我已经尝试在transport.py中将横幅超时从15秒更改为60秒,但它没有解决问题。”

你可以编辑transport.py,但不能编辑在安装目录中,它位于源代码目录中:

[root@localhost:/data/software/paramiko-1.9]# find . -name transport.py
./paramiko/transport.py
./build/lib/paramiko/transport.py

更改banner_timeout,如:

self.banner_timeout = 300
然后,重新安装paramiko,可以解决问题。

答案 2 :(得分:0)

在主要功能中添加猴子补丁,可以解决问题。

<?xml version="1.0"?>
<ADIS>
  <person GivenName="Mable" MiddleInitial="G" Surname="Stewart" Event="A" EventDate="2014-07-16"/>
</ADIS>