Ich bin neu auf Python. Ich schrieb ein Skript zu einem Host zu verbinden und führen Sie einen BefehlPython Paramiko SSH
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=pw)
print 'running remote command'
stdin, stdout, stderr = ssh.exec_command(command)
stdin.close()
for line in stdout.read().splitlines():
print '%s$: %s' % (host, line)
if outfile != None:
f_outfile.write("%s\n" %line)
for line in stderr.read().splitlines():
print '%s$: %s' % (host, line + "\n")
if outfile != None:
f_outfile.write("%s\n" %line)
ssh.close()
if outfile != None:
f_outfile.close()
print 'connection to %s closed' %host
except:
e = sys.exc_info()[1]
print '%s' %e
funktioniert gut, wenn dann Remote-Befehl kein tty benötigen. Ich habe ein invoke_shell Beispiel Nested SSH session with Paramiko gefunden. Ich bin nicht glücklich mit dieser Lösung, denn wenn ein Server eine Eingabeaufforderung hat, die nicht in meinem Skript angegeben ist -> Endlosschleife oder eine angegebene Eingabeaufforderung im Skript ist eine Zeichenfolge im Rückgabentext -> werden nicht alle Daten empfangen . Gibt es eine bessere Lösung, wo Stdout und Stderr wie in meinem Skript zurückgeschickt werden?
statt 'data_block' man zum Beispiel verwenden' session.recv (4096) 'und' session.recv_stderr (4096) 'sollten (wo die' hat data_block' kommen?). –
Sie haben Recht, der data_block war wie beschrieben (recv/recv_stderr), aber ich habe diese Zeilen versehentlich gelöscht. – ThePracticalOne
Ab Mai 2015 sind die Paramiko-Dokumente [hier] (http://docs.paramiko.org/en/1.15/index.html) – Jeremiah