Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent SFTP/SSH session timeout with paramiko

I'm using paramiko to connect to an SFTP server on which I have to download and process some files.

The server has a timeout set to 5 minutes, but some days it happens that the processing of the files can take longer than the timeout. So, when I want to change the working directory on the server to process some other files sftp.chdir(target_dir)) I get an exception that the connection has timed out:

File buildbdist.win32eggparamikosftp://ftp.py, line 138, in _write_all raise EOFError()

To counter this I thought that activating the keep alive would be the best option so I used the "set_keepalive" on the transport to set it to 30 seconds:

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()

But nothing changes at all. The change has absolutely no effect. I don't know if I'm misunderstanding the concept of set_keepalive here or maybe the server (on which I have no access) ignores the keep alive packets.

Isn't this the right way to counter this problem or should I try a different approach? I don't like the idea of "manually" sending some ls command to the server to keep the session alive.

like image 698
Patric Avatar asked Mar 23 '11 09:03

Patric


People also ask

How do I give a timeout in Paramiko?

The connection timeout can be set with the timeout parameter (that indicated the number of seconds for the time out as described here) of the connect function. @kukosk It would help if you mentioned the unit in which timeout is to be given, I guess its seconds. Note that timeout parameter sets TCP timeout.

How do I increase SSH inactivity timeout?

Login to the client machine and open the /etc/ssh/ssh_config file to set the necessary parameter values to increase the SS connection timeout. ServerAliveInterval and ServerAliveCountMax parameters are set to increase the connection timeout.


1 Answers

If the server is timing you out for inactivity, there's not much you can do from the client-side (other than perhaps send a simple command every now and again to keep your session from timing out).

Have you considered breaking apart your download and processing steps, so that you can download everything you need to start with, then process it either asynchronously, or after all downloads have completed?

like image 91
Steve Mayne Avatar answered Nov 15 '22 17:11

Steve Mayne