Python paramiko ssh

Ich bin neu auf Python. Ich habe ein Skript geschrieben, um eine Verbindung zu einem Host herzustellen und einen Befehl auszuführen

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 Fernbedienung keine tty benötigt. Ich habe eine Einladung zum Beispiel " Nested SSH" mit Paramiko gefunden . Ich bin nicht glücklich mit dieser Lösung, denn wenn ein Server eine Aufforderung hat, die in meinem Skript nicht angegeben ist -> Endlosschleife oder eine angegebene Eingabeaufforderung im Skript ist ein String im Rückgabetext -> werden nicht alle Daten empfangen . Gibt es eine bessere Lösung, wo Stdout und Stderr wie in meinem Drehbuch zurückgeschickt werden?

  • Ist es möglich, oswalk über SSH zu benutzen?
  • Wie man mit SFTP über Paramiko mit SSH Key - Pageant verbindet
  • Verschachtelte SSH-Sitzung mit Paramiko
  • Python SSH / SFTP Modul?
  • GitPython und SSH Keys?
  • So erzeugen Sie SSH-Schlüsselpaare mit Python
  • Wie kann ich eine SSH-Sitzung lokal mit Python starten?
  • Ssh-pakete schnüffeln von meinem Router mit scapy
  • 2 Solutions collect form web for “Python paramiko ssh”

    Es gibt umfangreiche paramiko API-Dokumentation finden Sie unter: http://www.lag.net/paramiko/docs/

    Ich verwende die folgende Methode, um Befehle auf einem passwortgeschützten Client auszuführen:

     import paramiko import sys nbytes = 4096 hostname = 'hostname' port = 22 username = 'username' password = 'password' command = 'ls' client = paramiko.Transport((hostname, port)) client.connect(username=username, password=password) stdout_data = [] stderr_data = [] session = client.open_channel(kind='session') session.exec_command(command) while True: if session.recv_ready(): stdout_data.append(session.recv(nbytes)) if session.recv_stderr_ready(): stderr_data.append(session.recv_stderr(nbytes)) if session.exit_status_ready(): break print 'exit status: ', session.recv_exit_status() print ''.join(stdout_data) print ''.join(stderr_data) session.close() client.close() 

    Es ist etwas falsch mit der akzeptierten Antwort, es manchmal (zufällig) bringt eine abgeschnittene Antwort vom Server. Ich weiß nicht, warum, ich habe nicht die fehlerhafte Ursache der akzeptierten Antwort untersucht, weil dieser Code perfekt für mich gearbeitet hat:

     import paramiko ip='server ip' port=22 username='username' password='password' cmd='some useful command' ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,port,username,password) stdin,stdout,stderr=ssh.exec_command(cmd) outlines=stdout.readlines() resp=''.join(outlines) print(resp) stdin,stdout,stderr=ssh.exec_command('some really useful command') outlines=stdout.readlines() resp=''.join(outlines) print(resp) 
    Python ist die beste Programmiersprache der Welt.