Как я могу установить SSH-соединение в Python 3.0? Я хочу сохранить файл на удаленном компьютере, где у меня настроен SSH без пароля.
Соединение SSH с Python 3.0
Ответы (6)
Я рекомендую вызывать ssh как подпроцесс. Это надежно и портативно.
import subprocess
proc = subprocess.Popen(['ssh', 'user@host', 'cat > %s' % filename],
stdin=subprocess.PIPE)
proc.communicate(file_contents)
if proc.retcode != 0:
...
Вам придется беспокоиться о цитировании имени файла назначения. Если вам нужна большая гибкость, вы можете даже сделать это:
import subprocess
import tarfile
import io
tardata = io.BytesIO()
tar = tarfile.open(mode='w:gz', fileobj=tardata)
... put stuff in tar ...
proc = subprocess.Popen(['ssh', 'user@host', 'tar xz'],
stdin=subprocess.PIPE)
proc.communicate(tardata.getvalue())
if proc.retcode != 0:
...
tardata.getvalue()
есть ваш ответ
- person Dietrich Epp; 11.09.2013
Первый:
Два шага для входа через ssh без пароля
в вашем терминале
[macm@macm ~]$ ssh-keygen
[macm@macm ~]$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected] <== change
Теперь с питоном
from subprocess import PIPE, Popen
cmd = 'uname -a'
stream = Popen(['ssh', '[email protected]', cmd],
stdin=PIPE, stdout=PIPE)
rsp = stream.stdout.read().decode('utf-8')
print(rsp)
Вы хотите, чтобы вся функциональность ssh была реализована в виде библиотеки Python? Взгляните на paramiko, хотя я думаю, что он не портирован на Python 3.0 (пока?).
Если вы можете использовать существующую установку ssh, вы можете использовать subprocess
способ, описанный Дитрихом, или (другой способ) вы также можете использовать pexpect
(здесь).
Это может занять немного времени, потому что "twisted: conch" не работает похоже, есть вариант 3.0.
Я написал привязки Python для libssh2, которые работать на Python 2.4, 2.5, 2.6, 2.7 и 3.
libssh2 отлично работает с Python 3.x.
См. эту статью о переполнении стека Как отправить файл с помощью scp с помощью python 3.2?