【发布时间】:2017-06-23 16:06:21
【问题描述】:
我想使用以下代码从 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
我已经尝试在transport.py 中增加self.banner_timeout = 60,就像某些票证中建议的那样,但没有成功。
【问题讨论】:
-
请修正您帖子中的代码格式
-
谢谢。完毕!现在一定更好
标签: python ssh download ftp paramiko