удаленное выполнение сценария оболочки с использованием Python - PullRequest
6 голосов
/ 23 сентября 2010

Могу ли я использовать Python в Windows для выполнения сценариев оболочки, которые находятся на удаленной машине Unix?

PS: Извините за позднее редактирование.Я знаю о Paramiko, но я хотел знать, есть ли способ сделать это без него.Для начала, можно ли это сделать с помощью subprocess ()?

Ответы [ 7 ]

15 голосов
/ 23 сентября 2010

Вам понадобится подключить 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 голосов
/ 24 сентября 2010

В Python отсутствует модуль «с батарейками» для удаленного запуска оболочки.Я бы посоветовал взглянуть на Fabric , который предоставляет действительно хороший интерфейс для работы через SSH на удаленных машинах, возможно, немного лучше, чем paramiko.Вы даже можете установить Fabric на Windows ...

2 голосов
/ 31 мая 2011

У меня есть один с мультипроцессором и подпроцессом, который я не тестировал, но должен работать на основе документов ...

Сервер:

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'])
1 голос
/ 24 сентября 2010

Я бы сделал это с Pexpect и Plink .

1 голос
/ 23 сентября 2010

Конечно, как правило, через протокол ssh (для «защищенной оболочки»), как это поддерживается для Python, например. paramiko стороннее расширение.

0 голосов
/ 24 сентября 2010

Если вы не хотите использовать paramiko, попробуйте telnetlib. Вы можете использовать его для выполнения удаленных команд.

0 голосов
/ 23 сентября 2010

Вам нужно будет либо запустить какой-нибудь сервер на удаленной машине, либо войти в ssh и сделать это самостоятельно.Было бы несложно использовать один из множества предварительно написанных серверов Python для прослушивания клиента и запуска сценария оболочки.

Аутентификация может быть или не быть проблемой для вас;Имейте в виду, что любой другой может выполнить те же действия, что и вы, и, возможно, получить тот же результат.Вы не хотите, чтобы кто-либо в intarwubs запускал ваши скрипты!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...