使用Python远程执行Shell脚本

7 投票
7 回答
11763 浏览
提问于 2025-04-16 04:30

有没有办法让我在Windows上用Python执行位于远程Unix机器上的shell脚本呢?

附注:抱歉这么晚才修改。我知道有Paramiko这个工具,但我想知道有没有其他方法可以做到。首先,能不能用subprocess()来实现呢?

7 个回答

2

我有一个关于多进程和子进程的例子,虽然我还没测试过,但根据文档来看应该是可以工作的...

服务器:

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'])
15

你需要通过ssh连接到远程机器,如果你有合适的登录凭证,就可以运行那些脚本了。

使用ssh的话,你可以很方便地用paramiko这个模块,它可以帮你自动化ssh的操作。

下面是一个典型的例子:

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()

把“df -h”这个命令换成你的脚本命令。

3

在Python中,没有现成的模块可以直接用来远程执行命令。建议你看看Fabric,这个工具提供了一个很不错的界面,可以通过SSH在远程机器上操作,使用起来可能比paramiko更方便。你甚至可以在Windows上安装Fabric……

撰写回答