如何使用python从Linux / Windows机器上执行远程Linux / Windows机器上的命令?

时间:2014-11-21 14:58:23

标签: python linux windows ssh

我有两台机器AB。这两台机器可以是Windows机器或Linux机器,但是 - 为简单起见 - 我事先知道哪个是哪台机器。我还知道远程计算机B的用户名和密码(没有其他身份验证方法)。所以我有四种可能的组合:

A=Windows  B=Windows
A=Windows  B=Linux
A=Linux    B=Windows
A=Linux    B=Linux

我正在寻找一个小的python脚本(或者更好的:标准库),通过它可以在B A上执行远程命令。确切地说:在机器上A我启动一个python脚本在远程机器B上运行一些命令cmd。在python中是否有通用的方法?

对于Linux-> Linux组合,我可以考虑使用sshsubprocess,但我可能遇到用户名/密码验证问题。

对于Windows-> Windows组合,我已经使用了一个名为psservice的工具(与子进程一起使用)。

知道如何以最pythonic的方式解决这个问题吗?不需要是一个功能,它可以以四种不同的方式实现。并且,如果可能的话,不使用第三方库(这有点不一致,因为psservice已经是我正在使用的第三方库...)。

2 个答案:

答案 0 :(得分:1)

我建议通过paramiko库使用ssh / sftp。

支持所有主要密码和哈希方法。也支持SFTP客户端和服务器模式。

它是跨平台的。

答案 1 :(得分:1)

尝试paramiko。我正在使用它,使用起来非常简单。

编辑1

host='IP'
username='user'
password='password'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host, username, password)

stdin, stdout, stderr = ssh.exec_command("pwd")
stdout.read()
ssh.close()

编辑2:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=password)

stdin, stdout, stderr = ssh.exec_command('pwd')

stdout.read()
ssh.close()

编辑3 这里还有一个使用私钥/公钥的解决方案:

key = paramiko.RSAKey.from_private_key_file(keyDest, keyPass)
ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host, username=user, pkey=key)

stdin, stdout, stderr = ssh.exec_command('pwd')
stdout.read()
ssh.close()

编辑1和编辑3都可以在我的脚本中正常工作..