Python pysftp、paramiko、grequests:读取SSH协议横幅时出错
我正在尝试从ipython会话打开SFTP连接。但是我的代码Python pysftp、paramiko、grequests:读取SSH协议横幅时出错,python,paramiko,pysftp,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-pyt
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
我已经尝试在transport.py中将横幅超时从15秒更改为60秒,但它没有解决问题
import grequests
import pysftp
###
from gevent import monkey
monkey.patch_all()
###
sftp = pysftp.Connection(
'ftp.server.com',
port=2255,
username='myname',
private_key='/Users/myname/.ssh/rsa')
建议检查横幅,但是我不知道如何使用这些信息来解决问题
import grequests
import pysftp
###
from gevent import monkey
monkey.patch_all()
###
sftp = pysftp.Connection(
'ftp.server.com',
port=2255,
username='myname',
private_key='/Users/myname/.ssh/rsa')
更新:
问题似乎是由导入包grequests引起的。如果我不导入grequests,pysftp将按预期工作。问题已提出,但尚未解决。我使用
paramiko
连接到SFTP服务器的方式如下所示
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
,但是paramiko
被证明更强大,更易于与大量文档一起使用。如果有帮助,请告诉我。作为您的回答:“我已经尝试在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
更改横幅超时,如:
self.banner_timeout = 300
然后,重新安装paramiko,就可以解决问题了 在主功能中添加猴子补丁,可以解决问题
import grequests
import pysftp
###
from gevent import monkey
monkey.patch_all()
###
sftp = pysftp.Connection(
'ftp.server.com',
port=2255,
username='myname',
private_key='/Users/myname/.ssh/rsa')
不幸的是,当只使用paramiko而不使用pysftp时,问题仍然存在。这很奇怪,因为我在完全相反的情况下遇到了问题,我使用了上面的代码片段。