我有两台机器, A
和B
这两台机器可以是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都工作正常在我的脚本..