Python 在paramiko尝试进行身份验证之前,在欢迎横幅中获取ftp返回代码530(未登录)
我正在编写一个python脚本,使用paramiko自动从远程ftp主机进行每日下载。脚本成功连接,但随后表示横幅不正确并退出。它在尝试验证之前断开连接 我得到了这个异常:“SSHException:读取SSH协议横幅时出错”,根据日志,横幅的最后一行是“530请使用用户登录并通过。”注意返回代码530,这意味着“未登录”。我想这就是帕拉米科所反对的 我确实使用了用户名和密码(见下面的代码),但主机似乎希望在paramiko拿出用户名和密码之前使用它们。问题出现在Python 在paramiko尝试进行身份验证之前,在欢迎横幅中获取ftp返回代码530(未登录),python,paramiko,Python,Paramiko,我正在编写一个python脚本,使用paramiko自动从远程ftp主机进行每日下载。脚本成功连接,但随后表示横幅不正确并退出。它在尝试验证之前断开连接 我得到了这个异常:“SSHException:读取SSH协议横幅时出错”,根据日志,横幅的最后一行是“530请使用用户登录并通过。”注意返回代码530,这意味着“未登录”。我想这就是帕拉米科所反对的 我确实使用了用户名和密码(见下面的代码),但主机似乎希望在paramiko拿出用户名和密码之前使用它们。问题出现在Transport.start\
Transport.start\u client()
中,它位于Transport.auth\u password()
内部Transport.connect()
之前
当我从命令行手动连接时,我可以使用以下命令触发530消息:
ftp -nd ftp.server.com
(我认为是由于-n
阻止了自动登录,而-d
启用了调试,因此我可以看到它。)530行紧跟在横幅后面,但实际上不是横幅的一部分。我知道这一点,因为如果我删除-n
,我将无法获得它,但会立即提示您输入凭据。因此,paramiko必须做一些类似于-n
选项的事情
我怎么能
#! /usr/bin/python2.7
import paramiko
import logging
logging.getLogger('paramiko').setLevel(logging.DEBUG)
paramiko.util.log_to_file('paramiko_log')
host = 'ftp.server.com'
port = 21
user = 'anonymous'
password = 'me@email.com'
# It is an anonymous server so I really am signing in with
# username 'anonymous' and my email address for a password.
t = paramiko.Transport((host, port))
t.connect(username=user, password=password)
ftp = paramiko.SFTPClient.from_transport(t)
# if I could get this far, this is where I would download the file.
ftp.close()
t.close()
以下是运行上述代码生成的日志:
DEB [20180725-08:52:34.230] thr=1 paramiko.transport: starting thread (client mode): 0xb69bb090L
DEB [20180725-08:52:34.231] thr=1 paramiko.transport: Local version/idstring: SSH-2.0-paramiko_2.4.1
DEB [20180725-08:52:34.287] thr=1 paramiko.transport: Banner: 220-This system is for authorized users only.
...[several more 220 lines]...
DEB [20180725-08:52:34.289] thr=1 paramiko.transport: Banner: 530 Please login with USER and PASS.
ERR [20180725-08:52:36.293] thr=1 paramiko.transport: Exception: Error reading SSH protocol banner
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: Traceback (most recent call last):
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 1893, in run
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: self._check_banner()
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 2049, in _check_banner
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: 'Error reading SSH protocol banner' + str(e)
ERR [20180725-08:52:36.294] thr=1 paramiko.transport: SSHException: Error reading SSH protocol banner
我试过
Transport.connect(…)
到Transport.start\u client()
和Transport.auth\u password(用户,密码)
,但它不会更改任何内容。问题出在start\u client()
内部ftp、ftps还是sftp?Paramiko用于SSH访问。标准ftp与SSH无关,您不会使用paramiko。如果是标准ftp,请查看名为ftplib的python标准库。请参阅@clockwatcher,这是一个使用错误工具进行作业的典型案例。我错误地认为ftp和sftp是相关的,帕拉米科可以同时做这两件事。新手移动。谢谢你帮我澄清。