Conexión SSH con Python 3.0

¿Cómo puedo hacer una conexión SSH en Python 3.0? Quiero guardar un archivo en una computadora remota donde tengo configurada una SSH sin contraseña.

Recomiendo llamar a ssh como un subproceso. Es confiable y portátil.

import subprocess proc = subprocess.Popen(['ssh', 'user@host', 'cat > %s' % filename], stdin=subprocess.PIPE) proc.communicate(file_contents) if proc.retcode != 0: ... 

Tendrías que preocuparte por citar el nombre de archivo de destino. Si quieres más flexibilidad, incluso podrías hacer esto:

 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: ... 

Primero:

Dos pasos para iniciar sesión a través de ssh sin contraseña

en tu terminal

 [macm@macm ~]$ ssh-keygen [macm@macm ~]$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@192.168.1.XX <== change 

Ahora con python

 from subprocess import PIPE, Popen cmd = 'uname -a' stream = Popen(['ssh', 'root@192.168.1.XX', cmd], stdin=PIPE, stdout=PIPE) rsp = stream.stdout.read().decode('utf-8') print(rsp) 

¿Desea que todas las funcionalidades de ssh se implementen como una biblioteca de Python? Eche un vistazo a paramiko, aunque creo que no está adaptado a Python 3.0 (¿todavía?).

Si puede usar una instalación ssh existente, puede usar la forma de subprocess descrita por Dietrich, o (otra manera) también podría usar pexpect ( sitio web aquí ).

Podría llevar un poco de trabajo porque ” twisted: conch ” no parece tener una variante 3.0.

He escrito enlaces de Python para libssh2 , que se ejecutan en Python 2.4, 2.5, 2.6, 2.7 y 3 .

libssh2 funciona muy bien para Python 3.x.
Consulte este artículo de desbordamiento de stack ¿Cómo enviar un archivo usando scp usando python 3.2?