从 FTP 服务器下载文件:异常:读取 SSH 协议横幅时出错

斯迪克比

我想使用以下代码从 FTP 服务器(我在 Linux 14.04 lts、Python 版本 2.7.13、Paramiko 版本 2.2.1 上安装了一个测试 vsftpd 服务器)下载文件(我没有发布所有内容,只发布在引发异常)

import datetime
import socket
import paramiko
import os
import shutil

today = datetime.date.today() - datetime.timedelta(days=3)
formattedtime = today.strftime('%Y%m%d')
destination = '/home/path/TestDir-%s' % formattedtime

if not os.path.exists(destination):
   os.mkdir(destination)

def file_download(hostname, username, hostport, password):
    rsa_private_key = r"~/.ssh/id_rsa"
    def agent_auth(transport, username):

    try:
        ki = paramiko.RSAKey.from_private_key_file(rsa_private_key)
    except Exception, e:
        print 'Failed loading {} {}'.format(rsa_private_key, e)        
    agent = paramiko.Agent()
    agent_keys = agent.get_keys() + (ki,)
    if len(agent_keys) == 0:
        return
    for key in agent_keys:
        print 'Trying ssh-agent key{}'.format(key.get_fingerprint().encode('hex'), )
        try:
            transport.auth_publickey(username, key)
            print '... success!'
            return
        except paramiko.SSHException, e:
            print '... failed!', e
    password = password  # This is used when password is used to login
    host = hostname
    username = username
    port = hostport
    paramiko.util.log_to_file("/home/path/Desktop//filename.log")
    hostkeytype = None
    hostkey = None
    files_copied = 0
    try:
        host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
    except IOError:
        try:
            host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/ssh/known_hosts'))
        except IOError:
            print '*** Unable to open host keys file'
            host_keys = {}
    if hostname in host_keys:
        hostkeytype = host_keys[hostname].keys()[0]
        hostkey = host_keys[hostname][hostkeytype]
        print 'Using host key of type %s' % hostkeytype
    try:
        transport = paramiko.Transport((host, port))
        transport.start_client()
        agent_auth(transport, username)
        if not transport.is_authenticated():
            print 'RSA key auth failed! Trying password login...'
            transport.auth_password(username=username, password=password)
        else:
            ssftp = transport.open_session()
        ssftp = paramiko.SFTPClient.from_transport(transport)
        print ssftp
    except Exception as qw:
        print "asdasd {}".format(qw)

但我总是得到这个例外:

读取 SSH 协议横幅时出错

这是堆栈跟踪:

DEB [20170623-17:28:22.595] thr=1  paramiko.transport: starting thread (client mode): 0x2806c910L DEB [20170623-17:28:22.595] thr=1 paramiko.transport: Local version/idstring: SSH-2.0-paramiko_2.1.2 
DEB [20170623-17:28:22.596] thr=1  paramiko.transport: Banner: 220 (vsFTPd 3.0.2) DEB [20170623-17:28:22.596] thr=1   paramiko.transport: Banner: 530 Please login with USER and PASS. 
ERR [20170623-17:28:24.599] thr=1  paramiko.transport: Exception: Error reading SSH protocol banner ERR [20170623-17:28:24.600] thr=1 paramiko.transport: Traceback (most recent call last): 
ERR [20170623-17:28:24.600] thr=1  paramiko.transport: File "/balh/blah/anaconda2/lib/python2.7/site-packages/paramiko/transport.py", line 1749, in run ERR [20170623-17:28:24.600] thr=1  paramiko.transport:     self._check_banner() 
ERR [20170623-17:28:24.600] thr=1  paramiko.transport: File "/balh/blah/anaconda2/lib/python2.7/site-packages/paramiko/transport.py", line 1897, in _check_banner 
ERR [20170623-17:28:24.600] thr=1  paramiko.transport: raise SSHException('Error reading SSH protocol banner' + str(e)) 
ERR [20170623-17:28:24.600] thr=1  paramiko.transport: SSHException: Error reading SSH protocol banner

我已经尝试增加self.banner_timeout = 60in transport.py,就像一些票中建议那样,但没有成功。

斯蒂芬·乌尔里希

横幅:220 (vsFTPd 3.0.2) ...

这意味着您正在连接到 FTP 服务器。

SSHException:读取 SSH 协议横幅时出错

这意味着您期待的是 SSH 服务器而不是 FTP 服务器。

这种混淆的原因是您假设 SFTP 就像 FTP,但事实并非如此。这些是完全不同的协议。SFTP 是基于 SSH 的文件传输,而 FTP 是RFC959 中描述的 30 多年历史的协议并且 FTPS(不是 SFTP)是添加到这个旧协议中的 SSL 支持。

要访问 FTP 或 FTPS 服务器,您可以ftplib在 Python 中使用
要使用 SFTP 访问您的服务器,请使用端口 22 (ssh) 而不是端口 21 (ftp) 作为目标端口,前提是此端口上有一个 SSH 服务器,它也允许 SFTP。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从FTP服务器下载文件时损坏文件

来自分类Dev

PHP下载文件已损坏(从ftp服务器下载时)

来自分类Dev

PHP下载文件已损坏(从ftp服务器下载时)

来自分类Dev

使用PHP或Python从FTP服务器读取或下载文件的5kb,而不是下载或读取整个文件

来自分类Dev

Ruby Net :: FTP-从服务器下载文件

来自分类Dev

将文件上传到ftp服务器时出错

来自分类Dev

将文件上传到ftp服务器时出错

来自分类Dev

Paramiko:读取SSH协议标题时出错

来自分类Dev

从具有双ssh的服务器下载文件

来自分类Dev

如何通过SSH服务器下载文件?

来自分类Dev

使用scp从服务器下载文件时出错

来自分类Dev

如何从FTP服务器下载文件,然后在下载完成后自动从服务器删除文件?

来自分类Dev

使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

来自分类Dev

使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

来自分类Dev

如何在浏览器的FTP服务器上下载文件?

来自分类Dev

从ftp服务器下载txt文件

来自分类Dev

设置ssh隧道以访问远程服务器上的FTP

来自分类Dev

使用正则表达式从FTP服务器下载文件

来自分类Dev

使用Python从包含给定字符串的FTP服务器下载文件

来自分类Dev

Java连接到FTP服务器并使用Java默认库下载文件

来自分类Dev

Laravel 7.如何从服务器(FTP)下载文件?

来自分类Dev

从各个子目录递归地从FTP服务器下载文件

来自分类Dev

配置FileZilla FTP服务器时出错

来自分类Dev

使用SSH.NET连接到端口990上的FTP站点时,“服务器响应包含空字符”

来自分类Dev

在Android中使用ftp4j连接到FTP服务器时出错

来自分类Dev

在FTP服务器的特定路径上载文件

来自分类Dev

使用SSH /命令行将FTP传输服务器到服务器

来自分类Dev

Python FTP服务器下载文件名中包含特定关键字的最新文件

来自分类Dev

请求不存在的文件时,FTP服务器挂起(“ FTP无传输超时”)

Related 相关文章

  1. 1

    从FTP服务器下载文件时损坏文件

  2. 2

    PHP下载文件已损坏(从ftp服务器下载时)

  3. 3

    PHP下载文件已损坏(从ftp服务器下载时)

  4. 4

    使用PHP或Python从FTP服务器读取或下载文件的5kb,而不是下载或读取整个文件

  5. 5

    Ruby Net :: FTP-从服务器下载文件

  6. 6

    将文件上传到ftp服务器时出错

  7. 7

    将文件上传到ftp服务器时出错

  8. 8

    Paramiko:读取SSH协议标题时出错

  9. 9

    从具有双ssh的服务器下载文件

  10. 10

    如何通过SSH服务器下载文件?

  11. 11

    使用scp从服务器下载文件时出错

  12. 12

    如何从FTP服务器下载文件,然后在下载完成后自动从服务器删除文件?

  13. 13

    使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

  14. 14

    使用FtpWebResponse下载文件-即使从ftp服务器中删除文件,也可以下载文件?

  15. 15

    如何在浏览器的FTP服务器上下载文件?

  16. 16

    从ftp服务器下载txt文件

  17. 17

    设置ssh隧道以访问远程服务器上的FTP

  18. 18

    使用正则表达式从FTP服务器下载文件

  19. 19

    使用Python从包含给定字符串的FTP服务器下载文件

  20. 20

    Java连接到FTP服务器并使用Java默认库下载文件

  21. 21

    Laravel 7.如何从服务器(FTP)下载文件?

  22. 22

    从各个子目录递归地从FTP服务器下载文件

  23. 23

    配置FileZilla FTP服务器时出错

  24. 24

    使用SSH.NET连接到端口990上的FTP站点时,“服务器响应包含空字符”

  25. 25

    在Android中使用ftp4j连接到FTP服务器时出错

  26. 26

    在FTP服务器的特定路径上载文件

  27. 27

    使用SSH /命令行将FTP传输服务器到服务器

  28. 28

    Python FTP服务器下载文件名中包含特定关键字的最新文件

  29. 29

    请求不存在的文件时,FTP服务器挂起(“ FTP无传输超时”)

热门标签

归档