python 管理ssh客户端

  1 [email protected]:~/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 [email protected]:~/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 %[email protected]%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 %[email protected]%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
时间: 2024-10-14 17:02:45

python 管理ssh客户端的相关文章

python3+paramiko实现ssh客户端

一.程序说明 ssh客户端实现主要有以下四个问题: 第一个问题是在python中ssh客户端使用哪个包实现----我们这里使用的是paramiko 第二个问题是怎么连接服务器----连接服务器直接使用connect()函数就可以了,有个坑是不在known_hosts文件中的机器默认不允许连接需要处理一下 第三个问题是连上之后怎么执行命令----连上之后直接用exec_command()函数就可以执行命令 第四个问题是怎么读取命令执行结果----exec_command()函数会返回函数执行结果,

FinalShell服务器管理软件,SSH客户端下载,支持Windows,Mac OS X,Linux

FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求. 用户QQ群 342045988 Windows版下载地址:http://www.hostbuf.com/downloads/finalshell_install.exe Mac版,Linux版安装及教程:http://www.hostbuf.com/t/1059.html FinalShell 服务器加速教程 更新日志:http://www.hostbuf.com/t

[Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验

1. ssh客户端生成key 1 $ ssh-keygen -t rsa -b 4096 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): vagrantid_rsa 4 Enter passphrase (empty for no passphrase): 5 Enter same passphrase again: 6

python管理DNS

DNS    检测 NS     对应DNS服务器 SOA    授权哪个服务器可以作为dns服务器 MX     mailexchange 邮件交换记录 A      address CNAME  别名 TXT PTR    反向解析 /etc/hosts 先往根域查找,再往.com域查找,  客户端发起请求,递归 服务器之间是迭代 .根域 递归 迭代 dnsmasq  服务 tcp  不安全网址 udp cp -rp  权限 host   ns.example.com nsupdate ho

Python通过SSH隧道链接Kafka

Python通过SSH隧道链接Kafka 最近有一个需求需要连接Kafka,但是它只允许内网链接,但是有些服务跑在服务器上总没有在我本机调试起来爽,毕竟很多开发工具还是在客户端机器上用的熟练.于是我想到了通过SSH连接Kafka,至于怎么连接可以通过XShell.Proxifier等等,由于个人还是觉得自己写更灵活,所以我是用Python里的sshtunnel写的(有需要后面我也可以分享下),个人喜好啊,你们自行选择. 由于笔者这里的Kafka环境使用Zookeeper做分布式部署,有多个bro

ssh客户端CRT连接linux使用技巧

设置仿真和回滚缓冲区 字体外观设置 日志文件设置 ssh客户端实现和linux共享文件 linux安装支持软件 yum install lrzsz –y #给linux安装上传下载支持软件 CRT设置上传和下载的路径 上传 rz –y:接-y表示覆盖已有文件,不能是目录.默认上传到当前路径下.输入命令回车会弹出选择文件的窗口,如下: 下载 sz –y test.txt:-y表示覆盖下载.后边接文件名. 默认下载到刚才设置的下载路径. 批量管理linux会话

linux下的ssh与ssh客户端

经常会看到ssh客户端,或者听到ssh到某台机器..问题:ssh和ssh客户端什么关系? 1.ssh,secure shell,是一种网络交互协议,也指实现该协议的网络服务程序.主要用于远程机器管理,包括客户端和服务器两部分. 服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求.服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证.密钥交换.对称密钥加密和非安全连接. 客户端包含ssh程序以及像scp(远程拷贝).slogin(远程登陆).sftp(安

ssh客户端

ssh客户端 ssh,配置文件:/etc/ssh/ssh_config 在配置文件/etc/ssh/ssh_config中Strict HostKey Checking no 首次登录不显示检查提示. 格式:ssh [[email protected]]host IP地址 [command] ssh [-l user]host IP地址 [command] (如果不指定用户,你是哪个用户就连接哪个用户上,后面还可跟命令) ? Ssh客户端允许实现对远程系统经验证地加密安全访问 当用户远程连接ss

利用 ssh 的用户配置文件 config 管理 ssh 会话

转载来自:http://dhq.me/use-ssh-config-manage-ssh-session 通常利用 ssh 连接远程服务器,一般都要输入以下类似命令: 1 ssh [email protected]hostname -p port 如果拥有多个 ssh 账号,特别是像我这种喜欢在终端里直接 ssh 登陆,不用 PuTTY.SecureCRT之类的 ssh 客户端的,要记住每个ssh 账号的参数,那是多么蛋疼的事情. 还好,ssh 提供一种优雅且灵活的方式来解决这个问题,就是利用