Frage

Ich bin mit einem einfachen pexpect Skript ssh auf einen Remote-Rechner und einen Wert von einem Befehl zurück greifen. Gibt es eine Möglichkeit, pexpect oder sshwise ich verwenden kann, die Unix-Gruß zu ignorieren? Das heißt, von

    child = pexpect.spawn('/usr/bin/ssh %s@%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]

Wie kann ich einfach den Rückgabewert erhalten, zu ignorieren, die "Last der erfolgreichen Anmeldung" und "(c) Copyright" stuff und ohne mit der Wert richtigen Position zu Sorge haben?

Danke!

War es hilfreich?

Lösung

Wenn Sie den Zugriff auf den Server haben, auf die Sie in anmelden, können Sie versuchen, eine Datei .hushlogin im Home-Verzeichnis namens erzeugen. Das Vorhandensein dieser Datei Schweigen die Standard-MOTD und ähnliche Sachen Gruß.

Alternativ versuchen ssh -T, die ganz Klemmenbelegung deaktivieren wird; Sie werden nicht ein Shell-Prompt bekommen, aber Sie können immer noch Befehle erteilen und die Antwort lesen.

Es gibt auch einen ähnlichen Thread auf ServerFault die Ihnen von nutzen sein kann.

Andere Tipps

Wenn der Befehl nicht interaktiv ist, können Sie einfach ssh HOST COMMAND den Befehl ohne alle Login Aufregung überhaupt passiert zu laufen. Wenn der Befehl ist interaktiv, können Sie häufig die ssh -t Option (ssh -t HOST COMMAND) an Kraft pseudo-tty Zuweisung und Trick, um den Remote-Prozesses zu denken, dass es an ein TTY angebracht läuft.

Ich habe gebrauchten paramiko zu automatisieren SSH-Verbindung, und ich habe es nützlich gefunden. Es kann mit Grüßen und stiller Ausführung befassen.

Hey Sie Kann alles, was Lärm töten, indem sie das sys-Modul und eine kleine Klasse mit:

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

Kann mich nicht erinnern, wo ich diese Schnipsel gefunden, aber es funktioniert für mich:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top