【发布时间】:2012-10-18 15:34:09
【问题描述】:
我正在使用 paramiko 打开 sftp 连接以访问远程文件。我在下面的内置函数中的所有代码似乎只有在我没有为 paramiko 启用日志记录时才有效:
paramiko.util.log_to_file( 'paramiko.log' )
所以当我的文件中没有上面的代码行时,下面的代码可以工作:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
client.connect( hostname,user, password)
sftp = client.open_sftp()
file = sftp.open( fpath, mode='r', bufsize=1 )
否则 python 将挂在这一行 client.connect(hostname,user,password) 并疯狂地写入 stderr 日志,最终杀死运行我的代码的 VM。
具体 paramiko 挂在这一行:
t.start_client()
在 client.connect 方法中。 paramiko 日志中没有任何有用的信息,stderr 充满了没有描述或回溯的错误。
研究这个问题时我遇到了“只有一个导入锁可用,所以当子线程尝试另一个导入时,它可以无限期地阻止它”如何确保打开 sftp 连接的代码永远不会被阻止?
【问题讨论】:
-
首先,当您的脚本中没有实例化
self._client时,您将引用它。你的实际代码是什么?帕拉米科挂起的原因可能有无数个。您正在通过密码连接,并且您没有明确指定look_for_keys,这意味着它设置为 True。这可能会导致AuthHandler()中的身份验证问题。尝试将look_for_keys=False添加到client.connect()。 -
另外,如果您认为
log_to_file所做的事情有误。如果您查看actual code,它会输出正在发生的步骤。如果引发异常,则会引发异常。 -
试过你的建议-look_for_keys 不能解决问题