2010-09-23 33 views
6

¿Hay alguna forma de que pueda usar Python en Windows para ejecutar scripts del shell que se encuentran en un equipo Unix remoto?ejecución remota del script de shell utilizando python

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

+0

posible duplicado de [comandos del servidor remoto ejecutar] (http://stackoverflow.com/questions/3173977/remote-server-command-execute) –

+1

Nada en la norma Pyt La biblioteca hon le permitirá realizar la ejecución remota en una máquina Unix. O bien debe usar SSH o escribir su propio servidor (no). Si prefiere evitar el uso de Paramiko, Twisted ofrece una implementación alternativa de SSH. De cualquier manera, deberá usar un paquete de terceros. – Rakis

+0

Puede evitar Paramiko. Según lo sugerido por Rakis, podrías explorar el soporte de ssh en Twisted. Puede agregar certificados para evitar el desafío con la contraseña y, en el subproceso, puede ejecutar el comando habitual ssh user @ servername y los siguientes comandos se ejecutarán en el servidor. – pyfunc

Respuesta

3

No hay ningún módulo 'pilas incluidas' para la ejecución remota de shell en python. Sugeriría mirar 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 se puede instalar en las ventanas ... Tela

13

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

Para usar ssh, puede utilizar simplemente módulo paramiko que proporciona la automatización ssh

Un típico ejemplo: comando

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

Sustituir "df -h" con el guión de tu shell

+0

Esto funciona genial !. Solo por lo que estaba buscando. – Nish

0

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

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

1

Claro, normalmente a través del protocolo ssh (para "shell seguro") compatible con Python, p. por la extensión de terceros paramiko.

0

Si no desea usar paramiko, intente con telnetlib. Puede usarlo para ejecutar comandos remotos.

2

Tengo uno con multiprocesamiento y subproceso que no he probado, pero debería trabajar sobre la base de 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']) 
Cuestiones relacionadas