一:简介
paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。
二:安装方法
安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块。唯一麻烦的就是安装PyCrypto时,需要GCC库编译,如果没有GCC库会报错,会导致PyCrypto以及paramiko无法安装。在安装过程中,遇到报错,百度基本可以找到解决方法!
以下以32 位的windows 7为例,说明paramiko的安装过程
1:安装python,2.2以上版本都可以,我使用的是2.7,安装过程略,并假设安装目录是D:\ProgramFiles\Python27。
2:判断本地是否安装了GCC,并在PATH变量可以找到,如果没有,可使用windows 版的GCC,即MinGW,下载地址:http://sourceforge.net/projects/mingw/,然后运行下载后的exe文件进行网络安装,假设目录为C:\mingw,在PATH中加入 C:\mingw\bin,并在D:\ProgramFiles\Python27\lib\distutils下新建一个名称是distutils.cfg的文件,填入:
[build]
compiler=mingw32
3:下载PyCrypto ,安装包见本文章附件
安装PyCrypto:
· 解压缩
· 在dos下进入解压缩的目录,运行
D:\ProgramFiles\Python27\python.exe setup.py build
D:\ProgramFiles\Python27\python.exe setup.py install
· 安装测试
运行python.exe,在提示符下输入:
import Crypto
如果没有出现错误提示,说明Crypto安装成功
4:下载paramiko,地址是http://www.lag.net/paramiko/,安装包见本文章附件
· 解压缩
· 在dos下进入解压缩的目录,运行
D:\ProgramFiles\Python27\python.exe setup.py build
D:\ProgramFiles\Python27\python.exe setup.py install
· 测试paramiko
运行python.exe,在提示符下输入:
import paramiko
如果没有出现错误提示,说明paramiko安装成功,如下图为我电脑的输出:
三:程序调用
''' Python远程登录多台Linux服务器并执行相关命令 ''' #!/usr/bin/python import paramiko port=22 IP="192.168.197.144" IPs=["192.168.197.144","192.168.174.181"] username="jtvpread" usernames=["jtvpread","jtaepread"] password="!QAZ2wsx" passwords=["!QAZ2wsx","#EDC7ujm"] #需要执行的命令 alarm_cmd="cat /cpic/jtvp/files/alarm/CPIC_P17.log|wc -l" ctilog_cmd="cat /cpic/jtvp/vpclog/cti.log|grep 'returned value = 01'|wc -l" port_3000_cmd="netstat -an|grep 3000|wc -l" #创建ssh对象 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #登陆各服务器执行指令 for i in range(len(IPs)): ssh.connect(IPs[i],port,usernames[i], passwords[i]) stdin, stdout, stderr = ssh.exec_command(alarm_cmd) #搜索该告警日志条数 str=stdout.readlines()#返回结果为一个列表,取出第一个结果即可 print "告警日志扫描:",IPs[i],":",str[0], stdin, stdout, stderr = ssh.exec_command(ctilog_cmd)#搜索关键字,如有则告警 str=stdout.readlines()#返回结果为一个列表,取出第一个结果即可 print "随路数据监控:",IPs[i],":",str[0], stdin, stdout, stderr = ssh.exec_command(port_3000_cmd)#搜索关键字,如有则告警 str=stdout.readlines()#返回结果为一个列表,取出第一个结果即可 print "端口连接数检查:",IPs[i],":",str[0], ssh.close() --------------------------------- 输出结果: 告警日志扫描: 192.168.197.144 : 240 随路数据监控: 192.168.197.144 : 0 端口连接数检查:192.168.197.144 : 1 告警日志扫描: 192.168.174.181 : 0 随路数据监控: 192.168.174.181 : 0 端口连接数检查:: 192.168.174.181 : 1
#从widnows端远程下载linux服务器上的文件 t = paramiko.Transport((IP,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) remotepath='/cpic/jtvp/files/alarm/CPIC_P17.log' localpath='c:/CPIC_P17.log' sftp.get(remotepath, localpath) print "--->下载成功" t.close() ---------------------------------------- 程序输出: --->下载成功 查看本地目录,文件的确下载下来了。
#上传文件到远程服务器, t= paramiko.Transport((IP,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) remotepath='/cpic/jtvp/files/alarm/spider.txt' localpath='c:/spider.txt' sftp.put(localpath,remotepath) print "--->上传成功" t.close() ---------------------------------------- 程序输出: --->上传成功 远程登录Linux服务器,检查是否上传成功。
通过上述的操作,批量管理Linux服务器变得非常简单,为后续的自动化运维提供了条件。可以自动化发布,自动化系统信息收集,告警日志收集,应用日志扫描等等,再调用告警接口,触发告警,让运维更加轻松和高效!