6

我已经编写了一个 paramiko 脚本来使用 sftp 批量传输文件。该脚本在我的开发机器上运行良好——Linux Mint 13,使用 Python 2.7。

当我将脚本移动到生产系统时,我发现我不得不在上面从头开始构建 Python,因为系统 Python 太旧了。所以我在它上面构建了 Python 2.7——Centos——然后尝试运行我的脚本。它失败了:

paramiko.SSHException - Errno 110, connection timeout

我已经用谷歌搜索了那个例外,但没有找到任何合适的东西。该脚本似乎“挂起”并且paramiko.Transport((host, port))部分超时。

我认为这很奇怪,因此尝试使用该系统中的 openssh 进行 sftp,以确保远程主机能够响应。它是——而且它奏效了。

所以,现在我回到我的脚本并简化所有内容,以便建立一个简单的连接.. 尽管如此,我还是遇到了连接超时。我不知道如何使用 paramiko 进行调试。有什么建议么?

这是基本脚本:

import os.path
import sys
import traceback
import paramiko
host = 'sftp.host.com'
user = 'user'
pw  = 'password'
storepath = '/home/ftpservice/download' 
is_dir = lambda x: oct(x)[1:3] == '40'
is_file = lambda x: oct(x)[1:3] == '10'
tp = paramiko.Transport((host, 22))
print 'tp is made, connecting '
tp.connect(username=user, password=pw, hostkey=None)
sftp = tp.open_sftp_client()
print 'sftp client made, now listing files'
filelist =  sftp.listdir('.')
print filelist
for i in filelist:
    fs = sftp.stat(i)
    print "file is %s " % i
    print "stmode %s" % sftp.stat(i).st_mode
    if is_dir(sftp.stat(i).st_mode):
        print "%s is a directory " % i
    elif is_file(sftp.stat(i).st_mode):
        print "%s is a file " % i
    else:
        print "no clue what %s is " % i
4

0 回答 0