我有两台机器A
和B
。这两台机器可以是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组合,我可以考虑使用ssh
和subprocess
,但我可能遇到用户名/密码验证问题。
对于Windows-> Windows组合,我已经使用了一个名为psservice
的工具(与子进程一起使用)。
知道如何以最pythonic的方式解决这个问题吗?不需要是一个功能,它可以以四种不同的方式实现。并且,如果可能的话,不使用第三方库(这有点不一致,因为psservice
已经是我正在使用的第三方库...)。
答案 0 :(得分:1)
答案 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都可以在我的脚本中正常工作..