How can I make an SSH connection in Python 3.0? I want to save a file on a remote computer where I have password-less SSH set up.
I recommend calling ssh as a subprocess. It’s reliable and portable.
import subprocess proc = subprocess.Popen(['ssh', 'user@host', 'cat > %s' % filename], stdin=subprocess.PIPE) proc.communicate(file_contents) if proc.retcode != 0: ...
You’d have to worry about quoting the destination filename. If you want more flexibility, you could even do this:
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: ...
Two steps to login via ssh without password
in your terminal
[macm@macm ~]$ ssh-keygen [macm@macm ~]$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub firstname.lastname@example.org.XX <== change
Now with python
from subprocess import PIPE, Popen cmd = 'uname -a' stream = Popen(['ssh', 'email@example.com.XX', cmd], stdin=PIPE, stdout=PIPE) rsp = stream.stdout.read().decode('utf-8') print(rsp)
You want all of the ssh-functionality implemented as a python library? Have a look at paramiko, although I think it’s not ported to Python 3.0 (yet?).
If you can use an existing ssh installation you can use the
subprocess way Dietrich described, or (another way) you could also use
pexpect (website here).
It might take a little work because “twisted:conch” does not appear to have a 3.0 variant.
I have written Python bindings for libssh2, that run on Python 2.4, 2.5, 2.6, 2.7 and 3.