Panoramica
La settimana scorsa ho scritto un articolo sul modulo pexpect in Python e come potete usarlo per occuparvi di alcune necessità di automazione, come ssh e ftp.
Vorrei continuare su quell’argomento e scrivere della sua classe pxssh. Con il modulo pxssh, è facile accedere ad altri server tramite SSH. Questo articolo è basato sulla documentazione ufficiale che si trova qui: http://pexpect.sourceforge.net/pxssh.html
Cos’è pxssh?
Pxssh è basato su pexpect. La sua classe estende pexpect.spawn per specializzare l’impostazione delle connessioni SSH. Uso spesso pxssh per creare connessioni ssh in python.
Documentazione del modulo
Aprire un terminale e digitare i seguenti comandi per ottenere aiuto sul modulo
import pxsshhelp(pxssh)Help on module pxssh:NAME pxsshFILE /usr/lib/python2.7/dist-packages/pxssh.pyDESCRIPTION This class extends pexpect.spawn to specialize setting up SSH connections. This adds methods for login, logout, and expecting the shell prompt. $Id: pxssh.py 513 2008-02-09 18:26:13Z noah $CLASSES pexpect.ExceptionPexpect(exceptions.Exception) ExceptionPxssh pexpect.spawn(__builtin__.object) pxssh
Puoi anche vedere l’aiuto qui http://pexpect.sourceforge.net/pxssh.html
Metodi e processo di login
Pxssh aggiunge metodi per il login, il logout e l’attesa del prompt della shell. Fa varie cose complicate per gestire molte situazioni nel processo di login SSH.
Per esempio, se la sessione è il tuo primo login, allora pxssh accetta automaticamente il certificato remoto; o se hai impostato l’autenticazione a chiave pubblica allora pxssh non aspetterà il prompt della password.
Come funziona pxssh?
pxssh usa il prompt della shell per sincronizzare l’output dall’host remoto. Per renderlo più robusto, imposta il prompt della shell su qualcosa di più unico di $ o #.
Questo dovrebbe funzionare sulla maggior parte delle shell stile Borne/Bash o Csh.
Esempio
Questo esempio esegue alcuni comandi su un server remoto e stampa il risultato.
Prima importiamo i moduli che ci servono. (pxssh e getpass)
Importiamo il modulo getpass, che chiederà all’utente una password, senza fare l’eco di ciò che digita nella console.
import pxsshimport getpasstry: s = pxssh.pxssh() hostname = raw_input('hostname: ') username = raw_input('username: ') password = getpass.getpass('password: ') s.login (hostname, username, password) s.sendline ('uptime') # run a command s.prompt() # match the prompt print s.before # print everything before the prompt. s.sendline ('ls -l') s.prompt() print s.before s.sendline ('df') s.prompt() print s.before s.logout()except pxssh.ExceptionPxssh, e: print "pxssh failed on login." print str(e)
Eseguire un comando su un server SSH remoto
Vediamo un altro esempio. Per eseguire un comando (‘uptime’) e stampare l’output, è necessario fare qualcosa del genere :
import pxsshs = pxssh.pxssh()if not s.login ('localhost', 'myusername', 'mypassword'): print "SSH session failed on login." print str(s)else: print "SSH session login successful" s.sendline ('uptime') s.prompt() # match the prompt print s.before # print everything before the prompt. s.logout() #We can also execute multiple command like this:s.sendline ('uptime;df -h')
Per maggiori informazioni su pxssh, consultare la documentazione ufficiale
Questo post è stato modificato l’ultima volta il 28 agosto 2020 10:53 am
0 commenti