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

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

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

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

对于Linux-> Linux组合,我可以认为使用ssh作为例子和subprocess ,但是我可能遇到用户名/密码authentication的问题。

对于Windows-> Windows的组合,有一个叫做psservice的工具,我已经使用了(和子psservice一起)。

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

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

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

而且它是跨平台的。

试试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都工作正常在我的脚本..