Устанавливаем paramiko
:
# pip install paramiko
Для начала – пример с авторизацией по логину-паролю.
Создаём пустой файл:
$ touch scp_file.txt
$ file /home/setevoy/scp_file.txt /home/setevoy/scp_file.txt: empty
И копируем его на удалённую машину:
>>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('77.***.***.40', port=2222, username='setevoy', password='password') >>> sftp = ssh.open_sftp() >>> sftp.put('/home/setevoy/scp_file.txt', '/home/setevoy/scp_file.txt') <SFTPAttributes: [ size=0 uid=500 gid=500 mode=0100644 atime=1434220036 mtime=1434220036 ]>
У Windows-пользователей может возникнуть ошибка при вызове ssh.connect()
:
NameError: global name ‘descriptor’ is not defined
Решение описано в посте Python: модуль paramiko – NameError: global name ‘descriptor’ is not defined.
На удалённом сервере проверяем:
$ ls -l /home/setevoy/ | grep scp -rw-r--r--. 1 setevoy setevoy 0 Jun 13 21:27 scp_file.txt
Изменим вызов ssh.connect()
, указав вместо пароля ключ:
>>> import paramiko >>> ssh = paramiko.SSHClient() >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) >>> ssh.connect('77.***.***.40', port=2222, username='setevoy', key_filename='/home/setevoy/.ssh/setevoy_akira') >>> sftp = ssh.open_sftp() >>> sftp.put('/home/setevoy/scp_file.txt', '/home/setevoy/scp_file.txt') <SFTPAttributes: [ size=0 uid=500 gid=500 mode=0100644 atime=1434220036 mtime=1434225080 ]>
Загрузить файл с удалённого сервера на локальную машину – sftp.get()
.
На удалённой машине создадим файл:
$ touch scp_from_remote.txt
И копируем его на локальную машину:
... >>> sftp.get('/home/setevoy/scp_to_remote.txt', '/home/setevoy/scp_from_remote.txt')
Файл загружен:
$ ls -l scp_from_remote.txt -rw-rw-r-- 1 setevoy setevoy 0 Jun 13 19:12 scp_from_remote.txt