使用paramiko防止SFTP/SSH会话超时
我正在使用paramiko来连接一个SFTP服务器,目的是下载和处理一些文件。
这个服务器设置了5分钟的超时时间,但有时候处理文件的时间可能会超过这个限制。因此,当我想在服务器上切换工作目录以处理其他文件时,使用sftp.chdir(target_dir)
就会出现连接超时的错误:
文件 buildbdist.win32eggparamikosftp://ftp.py, 第138行,在_write_all中 引发 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
的概念,或者可能是服务器(我无法访问)忽略了保持连接的数据包。
这样做是不是解决这个问题的正确方法,还是我应该尝试其他方法?我不太喜欢“手动”发送一些ls
命令到服务器来保持会话活跃的想法。
1 个回答
6
如果服务器因为你没有操作而把你踢掉了,那从客户端这边你能做的事情不多(除了偶尔发个简单的命令,保持你的会话不被踢掉)。
你有没有想过把下载和处理的步骤分开?这样你可以先把所有需要的东西都下载下来,然后再异步处理,或者等所有下载完成后再处理?