Python 3.0 的 SSH 连接
我怎样才能在Python 3.0中建立一个SSH连接?我想在一台远程电脑上保存一个文件,而那台电脑已经设置好了无密码SSH连接。
6 个回答
1
首先:
通过ssh无密码登录的两个步骤
在你的终端中
[macm@macm ~]$ ssh-keygen
[macm@macm ~]$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@192.168.1.XX <== change
现在用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)
2
你想要把所有的ssh功能做成一个Python库吗?可以看看paramiko,不过我觉得它还没有移植到Python 3.0(还没?)。
如果你可以使用现有的ssh安装,可以用Dietrich提到的subprocess
方法,或者(还有另一种方法)你也可以使用pexpect
(这里是官网)。
14
我建议把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:
...