Python 3.0 的 SSH 连接

9 投票
6 回答
34644 浏览
提问于 2025-04-15 12:03

我怎样才能在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:
    ...

撰写回答