Я использую 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
здесь или, может быть, сервер (к которому у меня нет доступа) игнорирует keep alive пакетов.
Разве это не правильный способ противодействия этой проблеме, или я должен попробовать другой подход? Мне не нравится идея «вручную» посылать какую-либо команду ls
на сервер, чтобы сохранить сеанс.