Ubuntu下,使用Gnome自带的Terminal时


如果需要Ssh登录很多台服务器,或者从其它服务器上Scp传文件时,每次都需要输入密码


这个和SecureCRT相比,确实很不方便


除非要把公钥逐个的拷贝到各个服务器上来实现rsa验证,但对于很多台服务器来说,也很麻烦


另外,由于Ubuntu默认的locale是utf8,而服务器上一般都是gbk的,如果默认登录的话,中文有可能会乱码


可以使用luit和pexpect配合完成自动登录的任务,需要把各服务器的用户名,密码,编码类型存储在配置文件中


然后,使用pexpect来自动输入用户名,远程到各服务器上,以下是代码片段:



折叠复制代码




  1. self.cmd="luit -encoding "+self.characters+" ssh " + self.userid + "@" + self.host  

  2. try:  

  3.     p=pexpect.spawn(self.cmd)  

  4.     i=p.expect(['password:', 'continue connecting (yes/no)?'],timeout=5)  

  5.     if i == 0:  

  6.         p.sendline(self.password)  

  7.     #如果host已经在known_hosts里,则直接就输入密码  

  8.     elif i == 1:  

  9.         p.sendline("yes")  

  10.         #接下来应该就是输入密码了,但一定还要expect一下,因为在password之前可能还有其它的  

  11. 提示信息  

  12.         p.expect(['password:'])  

  13.         p.sendline(self.password)  

  14.     p.interact()  

  15. except pexpect.TIMEOUT:  

  16.     print 'Connection timeout'  

  17. except pexpect.EOF:  

  18.     print 'Connection exit'  

  19.     p.close()  

  20. except Exception,e:  

  21.     print "Connection close",e