我正在使用paramiko連接到SFTP服務器,我必須下載並處理一些文件。用paramiko防止SFTP/SSH會話超時
服務器的超時設置爲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
命令發送到服務器以保持會話存活的想法。
Keepalive數據包在我的服務器上被忽略。它們僅用於保持網絡連接不會超時。 – JimB 2011-03-23 14:23:53