shell script ejecución remota usando python

¿Hay alguna forma en que pueda usar Python en Windows para ejecutar scripts de shell que se encuentran en una máquina Unix remota?

PD: Perdón por la edición tardía. Sé de Paramiko, pero quería saber si hay alguna forma de hacerlo sin él. Para empezar, ¿podría hacerse con subprocess ()?

No hay ningún módulo de ‘baterías incluidas’ para la ejecución remota de shell en Python. Yo sugeriría buscar en Fabric , que proporciona una interfaz realmente agradable para trabajar a través de SSH en máquinas remotas, probablemente un poco mejor que paramiko. Incluso puedes instalar Fabric en Windows …

Necesitará ssh en la máquina remota y si tiene las credenciales adecuadas, puede invocar los scripts de shell.

Para usar ssh, puede usar fácilmente el módulo paramiko que proporciona la automatización ssh

Un ejemplo típico:

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

Reemplace el comando “df -h” con su script de shell.

Tengo uno con multiprocesamiento y subproceso que no he probado, pero debería funcionar basado en documentos …

Servidor:

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

Cliente Remoto:

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

Claro, normalmente a través del protocolo ssh (para “shell seguro”) como es compatible con Python, por ejemplo, por la extensión de terceros paramiko .

Haría esto con Pexpect y Plink .

Tendrá que ejecutar algún tipo de servidor en la máquina remota, o ssh y hacerlo usted mismo. No sería difícil usar uno de los muchos servidores Python preescritos para escuchar a un cliente y lanzar un script de shell.

La autenticación puede o no ser un problema para usted; tenga en cuenta que cualquier otra persona puede seguir los mismos pasos que usted y, posiblemente, obtenga el mismo resultado. ¡No desea permitir que nadie en las intarwubs inicie sus scripts!

Si no quieres usar paramiko, prueba con telnetlib. Puedes usarlo para ejecutar comandos remotos.