SFTP не разрешает передачу между двумя удаленными серверами. Таким образом, вы должны инициировать передачу на одном из серверов, используя любой доступный там SFTP-клиент.
Если серверы являются обычными * nix-серверами, они имеют OpenSSH sftp
клиент .
Поэтому используйте SSHClient.exec_command
для выполнения sftp
, а затем используйте stdin.write
для подачи sftp
команд к нему.
Как:
stdin,stdout,stderr = ssh.exec_command('sftp username@hostname')
stdin.write("get file\n")
stdin.write("quit\n")
stdin.flush()
Хотя вышеперечисленное будет работать только в том случае, если на сервере, на котором вы запускаете sftp
, установлена аутентификация с открытым ключом OpenSSH (или любая другая аутентификация без ввода). С аутентификацией по паролю все сложнее, поскольку OpenSSH не позволяет вам автоматически вводить пароль. Вы должны иметь возможность написать пароль для stdin
, если вы установите get_pty=True
:
stdin,stdout,stderr = ssh.exec_command('sftp username@hostname', get_pty=True)
stdin.write(password + "\n")
stdin.write("get file\n")
stdin.write("quit\n")
stdin.flush()
get_pty
может принести некоторые нежелательные побочные эффекты, но я считаю, что в этом случае все должно работать без проблем.
Альтернативные подходы см. Как запустить команду sftp с паролем из скрипта Bash?
Вы также можете использовать любой другой SFTP-клиент, который может быть доступен на серверах, например curl
или lftp
.
Или вы можете выполнить python
на одном из серверов и передать ему код Paramiko / SFTP.