soy nuevo en python. Escribí un guión para conectarse a un host y ejecutar un comandopython 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
funciona bien cuando el entonces comando remoto no necesita un TTY. Encontré un ejemplo de invoke_shell Nested SSH session with Paramiko. No estoy contento con esta solución, porque si un servidor tiene un mensaje que no está especificado en mi script -> ciclo infinito o un mensaje específico en el script es una cadena en el texto de retorno -> no se recibirán todos los datos . ¿Hay alguna solución mejor en la que se envíen stdout y stderr como en mi script?
en lugar de 'data_block' uno debe utilizar' session.recv (4096) 'y' session.recv_stderr (4096) 'por ejemplo (¿de dónde vienen del' data_block'?). –
Tiene razón, el bloque de datos era como describió (recv/recv_stderr) pero borré esas líneas por accidente. – ThePracticalOne
A partir de mayo de 2015, los documentos de Paramiko están [aquí] (http://docs.paramiko.org/en/1.15/index.html) – Jeremiah