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, строка 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 или, может быть, сервер (к которому у меня нет доступа) игнорирует пакеты keep alive .

Isn ' Является ли это правильным способом решения этой проблемы или мне следует попробовать другой подход? Мне не нравится идея "вручную" посылать серверу некоторую команду ls , чтобы поддерживать сеанс в рабочем состоянии.

8
задан tshepang 3 December 2013 в 17:47
поделиться