Overview
Na semana passada escrevi um artigo sobre o módulo pexpect em Python e como o pode usar para tratar de algumas das necessidades de automatização, como ssh e ftp.
Quero continuar sobre esse tópico e escrever sobre a sua classe pxssh. Com o módulo pxssh, é fácil aceder a outros servidores através do SSH. Este artigo é baseado na documentação oficial aqui encontrada: http://pexpect.sourceforge.net/pxssh.html
O que é pxssh?
Pxssh é baseado em pexpect. A sua classe estende o pexpect.spawn para se especializar na instalação de ligações SSH. Utilizo frequentemente pxssh para fazer ligações ssh em python.
Documentação do módulo
Abrir um terminal e digitar os seguintes comandos para obter ajuda sobre o módulo
Pode também ver a ajuda aqui http://pexpect.sourceforge.net/pxssh.html
Métodos e processo de login
Pxssh adiciona métodos para login, logout, e esperando a concha pronta. Faz várias coisas complicadas para lidar com muitas situações no processo de login do SSH.
Por exemplo, se a sessão for o seu primeiro login, então pxssh aceita automaticamente o certificado remoto; ou se tiver configuração de autenticação de chave pública então pxssh não vai esperar pela prompt de senha.
Como funciona pxssh?
pxssh usa a prompt da shell para sincronizar a saída do hospedeiro remoto. A fim de tornar isto mais robusto, define a prompt shell para algo mais único do que apenas $ ou #.
Isto deve funcionar na maioria das shells estilo Borne/Bash ou Csh.
Exemplo
Este exemplo executa alguns comandos num servidor remoto e imprime o resultado.
Primeiro importamos os módulos de que precisamos. (pxssh e getpass)
Importamos o módulo getpass, que solicitará ao utilizador uma palavra-passe, sem fazer eco do que digitam na consola.
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)
Executar um comando num servidor SSH remoto
Vamos mostrar mais um exemplo. Para executar um comando (“uptime”) e imprimir a saída, é necessário fazer algo do género :
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')
Para mais informações sobre pxssh, consulte a documentação oficial
Este post foi modificado pela última vez a 28 de Agosto de 2020 10:53 am
0 comentários