удаленное выполнение сценария оболочки с использованием Python

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

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

 S.Lott23 сент. 2010 г., 19:46
 fixxxer24 сент. 2010 г., 11:12
@S. Лотт - вы автор "Формирование навыков в Python"?
 pyfunc23 сент. 2010 г., 23:56
Вы можете избежать Парамико. По предложению Rakis, вы можете изучить поддержку ssh в Twisted. Вы можете добавить сертификаты, чтобы избежать проблем с паролем, и в подпроцессе вы можете запустить обычную команду ssh user @ servername, после чего последующие команды будут выполнены на сервере.
 Rakis23 сент. 2010 г., 20:38
Ничто в стандартной библиотеке Python не позволит вам выполнять удаленное выполнение на Unix-машине. Либо вы должны использовать SSH, либо написать свой собственный сервер (не). Если вы предпочитаете не использовать Paramiko, Twisted предлагает альтернативную реализацию SSH. В любом случае, вам нужно будет использовать сторонний пакет.
 fixxxer29 окт. 2010 г., 09:45
@Rakis - Вы пробовали пакет подпроцесса в Python?

Ответы на вопрос(7)

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

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

Pexpect а такжепалить.

и если у вас есть соответствующие учетные данные, вы можете вызвать сценарии оболочки.

Для использования SSH, вы можете легко использовать модуль Paramiko, который обеспечивает автоматизацию SSH

http://www.lag.net/paramiko/

Типичный пример:

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" на скрипт вашей оболочки.

 Nish20 мар. 2013 г., 18:40
Это прекрасно работает! Просто для того, что я искал.

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

Сервер:

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 для прослушивания клиента и запуска сценария оболочки.

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

Решение Вопроса

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

Ваш ответ на вопрос