有没有办法在Windows上使用Python来执行位于远程Unix机器上的shell脚本?
附言:很抱歉编辑晚了。我知道Paramiko,但我想知道是否有一种方法可以不用它来完成。首先,能否使用subprocess()实现?
附言:很抱歉编辑晚了。我知道Paramiko,但我想知道是否有一种方法可以不用它来完成。首先,能否使用subprocess()实现?
import paramiko
import sys
import os
import os.path
passwd = ""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('servername', username, password=passwd)
stdin, stdout, stderr = ssh.exec_command('df -h')
x = stdout.readlines()
print x
for line in x:
print line
ssh.close()
使用你自己的shell脚本替换"df -h"命令。
在Python中,没有任何“一揽子”模块用于远程shell执行。我建议研究Fabric,它提供了一个非常好的界面,可以通过SSH在远程机器上工作,可能比paramiko更好用。您甚至可以在Windows上安装Fabric...
我有一个使用多进程和子进程的方案,虽然我没有测试过,但根据文档应该可以正常工作...
服务器:
import subprocess
from multiprocessing.managers import BaseManager
def get_subprocess_module():
return subprocess
class MyManager(BaseManager):
pass
MyManager.register( 'subprocess', get_subprocess_module )
MyManager(address=('', 50000), authkey='makecrazy').get_server().serve_forever()
远程客户端:
from multiprocessing.managers import BaseManager
class MyManager(BaseManager):
pass
MyManager.register('subprocess')
manager = MyManager(address=('dns.of.remote.server',50000),authkey='makecrazy')
manager.connect()
remoteSubprocess = manager.subprocess()
rc = remoteSubprocess.call(['ls', '-aplh'])
你需要在远程机器上运行某种类型的服务器,或者通过ssh登录并自己完成。使用许多预先编写的Python服务器之一来监听客户端并启动shell脚本并不困难。
身份验证可能对你构成问题,要注意的是,其他人可以按照你的步骤进行操作,并有可能获得相同的结果。你不想让任何人在互联网上启动你的脚本!