码迷,mamicode.com
首页 > 编程语言 > 详细

python 管理ssh客户端

时间:2015-02-09 12:29:56      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

  1 root@zenghui:~/python# cat ipnew.txt
  2 vm_esxi133,192.168.11.133,22,1qaz2wsx,root,0
  3 int_www45,192.168.11.45,22,wdzj201445,root,0
  4 int_23,192.168.11.23,22,wdzj2014,root,0
  5 int_24,192.168.11.24,2022,wdzjkey,salt,1
  6 root@zenghui:~/python# cat ip_ssh.py 
  7 #!/usr/bin/python
  8 #-*- coding:utf-8 -*-
  9 import pexpect,commands,os,re,sys
 10 import struct, fcntl, signal,termios
 11 ip_new=open(ipnew.txt,a+)
 12 global ipaddress,ipaddresskey
 13 ipaddress={}
 14 ipaddresskey={}
 15 
 16 #从ipnew.txt获取内容加入ipaddress字典中
 17 def ip_name():
 18     file=open(ipnew.txt,r).readlines()
 19     ii=0
 20     for i in file:
 21     ii+=1
 22         aa=i.split(,)
 23         ipaddress.setdefault(ii,[aa[0],[aa[1],aa[2],aa[3],aa[4],aa[5]]])
 24         ipaddresskey.setdefault(aa[0],[aa[1],aa[2],aa[3],aa[4],aa[5]])
 25     #print ipaddress    
 26 #添加用户
 27 def ipadd():
 28     ipre=[]
 29     namere=[]
 30     portre=[]
 31     pwre=[]
 32     keyre=[]
 33     usernamere=[]
 34     while namere==[]:
 35         name=str(raw_input(请输入你的项目名称: ))
 36         namere=re.findall(\w+,name)
 37         if len(namere) > 1 or ipaddresskey.has_key(name)==True:
 38             print 你输入的格式不对或名称已经存在,请重新输入!
 39             namere=[]
 40             
 41     while ipre==[]:
 42         ip=str(raw_input(请输入ip地址:192.168.11.23: ))
 43         ipre=re.findall(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},ip)
 44         if len(ipre) > 1:
 45             ipre=[]
 46     while portre==[]:
 47         port=str(raw_input(请输入端口号:22: ))
 48         portre=re.findall(\d{1,5},port)
 49         if len(portre) > 1:
 50             portre=[]
 51             
 52     while pwre==[]:
 53         pw=str(raw_input(请输入密码“: ))
 54         pwre=re.findall(\S+,pw)
 55         if len(pwre) > 1:
 56             pwre=[]    
 57             
 58     while usernamere==[]:
 59         username=str(raw_input(输入用户名: ))
 60         usernamere=re.findall(\w+,username)
 61         if len(usernamere) > 1:
 62             usernamere=[]
 63 
 64     while keyre==[]:
 65         key=str(raw_input(请输入key“: ))
 66         keyre=re.findall(\S+,key)
 67         if len(keyre) > 1:
 68             keyre=[]    
 69 
 70     ipadd=str(name)+,+str(ip)+,+str(port)+,+str(pw)+,+str(username)+,+str(key)+\n
 71     ip_new.write(ipadd)
 72     print ipadd+添加成功!
 73     exit()
 74    # ip_new.close()
 75    # file.close()
 76 
 77 
 78 #主菜单
 79 def menu():
 80     os.system(clear)
 81     print **************************MENU*****************************
 82     for key,value in ipaddress.items():
 83         print str(key)+   +str(value[0])+        +str(value[1][0])
 84     print "回车退出!"
 85     print ***********************************************************
 86     name=int(raw_input(请输入机器编号: ))
 87     if name == ‘‘:
 88     exit()
 89     ssh_command(ipaddress[name][1][0],ipaddress[name][1][1],ipaddress[name][1][2],ipaddress[name][1][3],ipaddress[name][1][4].strip())
 90     
 91 
 92 #用户登陆
 93 def ssh_command(ipaddr,port,passwd,name,key):
 94     try:
 95     global ssh_key
 96         if key == 0:
 97             keys=‘‘
 98             ssh_key=pexpect.spawn(ssh %s -p  %s %s@%s % (keys,port,name,ipaddr)) 
 99             status=ssh_key.expect([password])
100         else:
101             keys=-i id_dsa_key
102             ssh_key=pexpect.spawn(ssh %s -p  %s %s@%s % (keys,port,name,ipaddr))
103             status=ssh_key.expect([pexpect.TIMEOUT,id_dsa_key])
104         if status==1:
105             ssh_key.sendline(passwd)
106         elif status==0:
107             ssh_key.sendline(yes\n)
108             ssh_key.expect(password:)
109             ssh_key.sendline(passwd)
110         signal.signal(signal.SIGWINCH, sigwinch_passthrough)
111         size = getwinsize()
112         ssh_key.setwinsize(size[0], size[1])
113         ssh_key.interact()
114     except Exception as e:
115         print e
116 
117 #设置终端大小适合窗口
118 def sigwinch_passthrough (sig, data):
119     winsize = getwinsize()
120     global ssh_key
121     ssh_key.setwinsize(winsize[0],winsize[1])
122 #获取终端屏幕大小
123 def getwinsize():
124     if TIOCGWINSZ in dir(termios):
125         TIOCGWINSZ = termios.TIOCGWINSZ
126     else:
127         TIOCGWINSZ = 1074295912L # Assume
128     s = struct.pack(HHHH, 0, 0, 0, 0)
129     x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s)
130     return struct.unpack(HHHH, x)[0:2]
131   
132 
133 if __name__ == "__main__":
134     try:
135     if len(sys.argv) == 2:
136             if sys.argv[1]==ipadd:
137             ip_name()
138                 ipadd()
139         else:
140             print 请输入参数"ipadd"
141     elif len(sys.argv) == 1:
142             ip_name()
143             menu()
144     else:
145         print 请重新输入!
146     except:
147     pass

 

python 管理ssh客户端

标签:

原文地址:http://www.cnblogs.com/zenghui940/p/4281086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!