设为首页 收藏本站
查看: 897|回复: 0

[经验分享] python 管理ssh客户端

[复制链接]

尚未签到

发表于 2015-12-1 15:10:49 | 显示全部楼层 |阅读模式
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
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145982-1-1.html 上篇帖子: Python:异常处理 下篇帖子: 利用python scrapy 框架抓取豆瓣小组数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表