2010-09-21 30 views
5

Estoy usando un simple script pexpect para ssh a una máquina remota y tomo un valor devuelto por un comando. ¿Hay alguna forma, pexpect o sshwise que pueda usar para ignorar el saludo de Unix? Eso es, desdePexpect - Silencio Salida de conexión ssh

child = pexpect.spawn('/usr/bin/ssh %[email protected]%s' % (rem_user, host)) 
    child.expect('[pP]assword: ', timeout=5) 
    child.sendline(spass) 
    child.expect([pexpect.TIMEOUT, prompt]) 
    child.before = '0' 
    child.sendline ('%s' % cmd2exec) 
    child.expect([pexpect.EOF, prompt]) 

    # Collected data processing 
    result = child.before 
    # logon to the machine returns a lot of garbage, the returned executed command is at the 57th position 
    print result.split('\r\n') [57] 
    result = result.split('\r\n') [57] 

¿Cómo puedo conseguir simplemente el valor devuelto, sin hacer caso, el "inicio de sesión correcto Last" y "(c) Derechos de autor" cosas y sin tener que preocupación por la posición correcta de valor?

Gracias!

Respuesta

4

Si tiene acceso al servidor en el que está iniciando sesión, puede intentar crear un archivo denominado .hushlogin en el directorio de inicio. La presencia de este archivo silencia el saludo MOTD estándar y cosas similares.

Como alternativa, intente con ssh -T, lo que deshabilitará completamente la asignación de terminales; no recibirá un aviso de shell, pero aún puede emitir comandos y leer la respuesta.

También hay un hilo similar en ServerFault que puede ser de alguna utilidad para usted.

+0

Gracias. Tengo acceso al host pero no tengo permiso para editar nada allí. ssh -t funciona maravillosamente. –

4

Si el comando no es interactivo, puede ejecutar ssh HOST COMMAND para ejecutar el comando sin que todo el entusiasmo de inicio de sesión suceda. Si el comando es interactivo, puede usar con frecuencia la opción ssh -t (ssh -t HOST COMMAND) para forzar la asignación de pseudo-tty y engañar al proceso remoto para que piense que se está ejecutando adjunto a un TTY.

+0

Gracias. ¡Exactamente lo que necesitaba! ¡Voté a Tamás respondiendo porque era un poco más completo, pero votaría si pudiera! –

0

He utilizado paramiko para automatizar la conexión ssh y lo he encontrado útil. Puede tratar con saludos y ejecución silenciosa.

+0

Gracias. Ya me topé con él cuando descubrí pexpect pero no lo intenté. Lo haré esta vez. –

0

Hey allí se kann matar a todo ese ruido mediante el uso del módulo sys y una clase pequeña:

class StreamToLogger(object): 
    """ 
    Fake file-like stream object that redirects writes to a logger instance. 
    """ 
    def __init__(self, logger, log_level=logging.INFO): 
     self.logger = logger 
     self.log_level = log_level 
     self.linebuf = '' 

    def write(self, buf): 
     for line in buf.rstrip().splitlines(): 
      self.logger.log(self.log_level, line.rstrip()) 


#Mak 
stdout_logger = logging.getLogger('STDOUT') 
sl = StreamToLogger(stdout_logger, logging.INFO) 
sys.stdout = sl 



stderr_logger = logging.getLogger('STDERR') 
sl = StreamToLogger(stderr_logger, logging.ERROR) 
sys.stderr = sl 

no puede recordar dónde me encontré con que fragmento pero funciona para mí :)

Cuestiones relacionadas