Ubuntu下使用pexpect自动ssh和scp
Ubuntu下,使用Gnome自带的Terminal时
如果需要Ssh登录很多台服务器,或者从其它服务器上Scp传文件时,每次都需要输入密码
这个和SecureCRT相比,确实很不方便
除非要把公钥逐个的拷贝到各个服务器上来实现rsa验证,但对于很多台服务器来说,也很麻烦
另外,由于Ubuntu默认的locale是utf8,而服务器上一般都是gbk的,如果默认登录的话,中文有可能会乱码
可以使用luit和pexpect配合完成自动登录的任务,需要把各服务器的用户名,密码,编码类型存储在配置文件中
然后,使用pexpect来自动输入用户名,远程到各服务器上,以下是代码片段:
折叠复制代码
- self.cmd="luit -encoding "+self.characters+" ssh " + self.userid + "@" + self.host
- try:
- p=pexpect.spawn(self.cmd)
- i=p.expect(['password:', 'continue connecting (yes/no)?'],timeout=5)
- if i == 0:
- p.sendline(self.password)
- #如果host已经在known_hosts里,则直接就输入密码
- elif i == 1:
- p.sendline("yes")
- #接下来应该就是输入密码了,但一定还要expect一下,因为在password之前可能还有其它的
- 提示信息
- p.expect(['password:'])
- p.sendline(self.password)
- p.interact()
- except pexpect.TIMEOUT:
- print 'Connection timeout'
- except pexpect.EOF:
- print 'Connection exit'
- p.close()
- except Exception,e:
- print "Connection close",e