首页 > 解决方案 > SFTP 连接失败 socket.timeout?

问题描述

我正在尝试连接到我们的一个 SFTP 服务器以自动生成报告。我们每周从该服务器中提取一个文件,但我无法使此连接正常工作。我没有找到对以下回溯错误的任何有用参考。任何人都知道可能导致此问题的原因是什么?

执行代码 2 或 3 秒后出现 socket.timeout 错误。

import paramiko


cli = paramiko.SSHClient()

cli.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cli.connect(hostname='AHOST', port=21, username="USER", password="PASS")

stdin_, stdout_, stderr_ = cli.exec_command("ls -l ~")
print(stdout_.readlines())

cli.close()

追溯:

Exception: Error reading SSH protocol banner
Traceback (most recent call last):
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 2138, in _check_banner
    buf = self.packetizer.readline(timeout)
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\packet.py", line 367, in readline
    buf += self._read_timeout(timeout)
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\packet.py", line 576, in _read_timeout
    raise socket.timeout()
socket.timeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 1966, in run
    self._check_banner()
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 2143, in _check_banner
    "Error reading SSH protocol banner" + str(e)
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

Traceback (most recent call last):
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 2138, in _check_banner
    buf = self.packetizer.readline(timeout)
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\packet.py", line 367, in readline
    buf += self._read_timeout(timeout)
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\packet.py", line 576, in _read_timeout
    raise socket.timeout()
socket.timeout

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/user_name/PycharmProjects/PDD_Report/MAIN/MAIN.py", line 12, in <module>
    cli.connect(hostname='A40T', port=21, username="user_name", password="gate001")
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\client.py", line 397, in connect
    t.start_client(timeout=timeout)
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 587, in start_client
    raise e
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 1966, in run
    self._check_banner()
  File "C:\Users\user_name\Desktop\Python 3.6.2\lib\site-packages\paramiko\transport.py", line 2143, in _check_banner
    "Error reading SSH protocol banner" + str(e)
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner

标签: pythonsftpparamiko

解决方案


您正在连接到 FTP 端口 21。

SSH/SFTP 使用端口 22(参数的默认值是什么port,您可以覆盖它)。


旁注1:您的问题是关于SFTP的。然而,SFTPClient您使用SSHClient并执行shell命令而不是使用 ,这与 SFTP 无关。


旁注2:不要这样使用AutoAddPolicy。这样做会失去安全感。
请参阅Paramiko “未知服务器”


推荐阅读