我正在使用paramiko连接到一个SFTP服务器上,需要下载和处理一些文件。
该服务器设置了5分钟的超时时间,但有些日子处理文件可能需要比超时时间更长。因此,当我想要改变服务器上的工作目录以处理其他文件时,sftp.chdir(target_dir))
会引发连接超时的异常:
文件 buildbdist.win32eggparamikosftp://ftp.py, 第138行,_write_all函数中,raise EOFError()
为了解决这个问题,我认为启用保持活动状态是最好的选择,所以我在传输上使用了“set_keepalive”将其设置为30秒:
ssh = paramiko.SSHClient()
ssh.set_missing_hostkey_policy(paramiko.AutoAddPolicy())
ssh.connect(ssh_server, port=ssh_port, username=ssh_user, password=password)
transport = ssh.get_transport()
transport.set_keepalive(30)
sftp = transport.open_sftp_client()
但是什么也没有改变。这个更改绝对没有效果。我不知道是否我误解了set_keepalive
的概念,或者可能是服务器(我无法访问)忽略了 keep alive 数据包。
这难道不是解决问题的正确方法吗?还是我应该尝试其他方法?我不喜欢“手动”发送一些ls
命令来保持会话活动状态的想法。