Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pysftp、paramiko、grequests:读取SSH协议横幅时出错_Python_Paramiko_Pysftp - Fatal编程技术网

Python pysftp、paramiko、grequests:读取SSH协议横幅时出错

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

我正在尝试从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
我已经尝试在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时,问题仍然存在。这很奇怪,因为我在完全相反的情况下遇到了问题,我使用了上面的代码片段。