Python使用Paramiko模块编写脚本进行远程服务器操作


Posted in Python onMay 05, 2016

简介:
paramiko是python(2.2或更高)的模块,遵循SSH2协议实现了安全(加密和认证)连接远程机器。
安装所需软件包:
http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.5.tar.gz
http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

tar zxvf pycrypto-2.5.tar.gz
cd pycrypto-2.5
python setup.py build
python setup.py install
tar zxvf paramiko-1.7.7.1.tar.gz
cd paramiko-1.7.7.1
python setup.py build
python setup.py install

脚本简单编写:
管理单台服务器:

脚本一:查询172.16.22.23磁盘使用情况

#!/usr/bin/python 
import paramiko 
hostname="172.16.22.23" 
port=22 
username="root" 
password="larryroot" 
if __name__=="__main__": 
    s=paramiko.SSHClient() 
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    s.connect(hostname,port,username,password) 
    stdin,stdout,sterr=s.exec_command("df -Th") 
    print stdout.read() 
    s.close()

       
脚本二:在远程服务器上执行相应命令

#!/usr/bin/python 
#by larry 
#2011/01/30 
import sys 
import paramiko 
 
hostname=sys.argv[1] 
command = " ".join(sys.argv[2:]) 
port=22 
username="root" 
password="larryroot" 
if __name__=="__main__": 
    s=paramiko.SSHClient() 
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    s.connect(hostname,port,username,password) 
    stdin,stdout,sterr=s.exec_command(command) 
    print stdout.read() 
    s.close()

使用方法:

python single1.py ip地址  命令
[root@localhost ~]# python single1.py 172.16.22.23 df -TH
Filesystem  Type   Size  Used Avail Use% Mounted on
/dev/sda2   ext3   13G  6.0G  5.7G 52% /
/dev/sda1   ext3   104M  12M  87M 13% /boot
tmpfs    tmpfs   61M   0  61M  0% /dev/shm
/dev/sda4   ext3   7.6G  465M  6.8G  7% /data
/dev/sdb1   ext3   32G  5.9G  25G 20% /autocd
[root@localhost ~]# python single1.py 172.16.22.23 free -m
total    used    free   shared  buffers   cached
Mem:      114    112     2     0     26     35
-/+ buffers/cache:     50     64
Swap:     1027     0    1027

脚本三:管理多台服务器:批量查询ip列表中对应服务器的磁盘使用情况

#!/usr/bin/python 
#by larry 
#2011/01/30 
import paramiko 
port=22 
username="root" 
file=open("ip.list") 
for line in file: 
    hostname=str(line.split("\t")[1]) 
    password=str(line.split("\t")[4]).strip() 
    print "##########################",hostname,"########################" 
    s=paramiko.SSHClient() 
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    s.connect(hostname,port,username,password) 
    stdin,stdout,sterr=s.exec_command("df -Th") 
    print stdout.read() 
    s.close() 
file.close()

用法:

[root@localhost ~]# python ssh.py
############################ 172.16.22.22 ########################
Filesystem  Type  Size Used Avail Use% Mounted on
/dev/sda2   ext3   12G 5.6G 5.3G 52% /
/dev/sda1   ext3   99M  12M  83M 13% /boot
tmpfs    tmpfs   58M   0  58M  0% /dev/shm
/dev/sda4   ext3  7.1G 443M 6.3G  7% /data
/dev/sdb1   ext3   30G 5.5G  23G 20% /autocd
############################ 172.16.22.23 ########################
Filesystem  Type  Size Used Avail Use% Mounted on
/dev/sda2   ext3   15G 2.6G  11G 19% /
/dev/sda1   ext3   99M  12M  82M 13% /boot
tmpfs    tmpfs   60M   0  60M  0% /dev/shm
/dev/sda4   ext3   33G 377M  31G  2% /data

ip.list文件内容:

dx   172.16.22.22  22  root  larryroot
wt   172.16.22.23  22  root  larryroot

脚本四:类似于脚本二,在所有远程服务器上执行相应命令

#!/usr/bin/python 
#by larry 
#2011/01/30 
import paramiko 
import sys 
port=22 
username="root" 
command = " ".join(sys.argv[1:]) 
file=open("ip.list") 
for line in file: 
    hostname=str(line.split("\t")[1]) 
    password=str(line.split("\t")[4]).strip() 
    print "##################",hostname,"######################" 
    s=paramiko.SSHClient() 
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    s.connect(hostname,port,username,password) 
    stdin,stdout,sterr=s.exec_command(command) 
    print stdout.read() 
    s.close() 
file.close()

 
用法:

python ssh.py 命令

简单整理到这里通过python的paramiko模块可以很方便的管理服务器,文件的上传下载后续会整理出来。

SSH
下面是通过ssh的dsa或rsa公钥验证批量登录服务器执行命令:

#!/usr/bin/python 
#2012/02/02 by larry 
import paramiko 
import sys,os 
port=22 
username="larry" 
key_file="~/.ssh/authorized_keys" 
know_host="/home/larry/.ssh/known_hosts" 
command=" ".join(sys.argv[1:]) ####获取命令行参数 
file=open("ip.list") 
for line in file: 
    hostname=str(line.split(" ")[1]) ####截取ip字段 
    print "#####################################",hostname,"###############################################" 
    s=paramiko.SSHClient() 
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    s.load_system_host_keys(know_host) 
    s.connect(hostname,port,username,key_file) 
    stdin,stdout,sterr=s.exec_command(command) 
    print stdout.read().strip() 
    s.close() 
file.close()

 
执行python脚本:

python sshkey.py df -h
################172.16.22.22########################
Filesystem      Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
14G 3.5G 9.7G 27% /
/dev/mapper/VolGroup00-data
116G  47G  64G 43% /data
/dev/cciss/c0d0p1   99M  13M  82M 14% /boot
tmpfs         5.9G   0 5.9G  0% /dev/shm
Python 相关文章推荐
用python实现面向对像的ASP程序实例
Nov 10 Python
Python最基本的输入输出详解
Apr 25 Python
Python快速排序算法实例分析
Nov 29 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
浅谈flask中的before_request与after_request
Jan 20 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 Python
Python使用贪婪算法解决问题
Oct 22 Python
Python程序控制语句用法实例分析
Jan 14 Python
pycharm 实现调试窗口恢复
Feb 05 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python环境下搭建属于自己的pip源的教程
May 05 #Python
使用Python判断质数(素数)的简单方法讲解
May 05 #Python
Python编程中归并排序算法的实现步骤详解
May 04 #Python
Python手机号码归属地查询代码
May 04 #Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 #Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 #Python
Python中使用插入排序算法的简单分析与代码示例
May 04 #Python
You might like
PHP中用hash实现的数组
2011/07/17 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js控制table合并具体实现
2014/02/20 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
python读取中文txt文本的方法
2018/04/12 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Series和DataFrame使用简单入门
2019/11/13 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
Overload和Override的区别
2012/09/02 面试题
大学运动会入场词
2014/02/22 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
介绍信的格式
2015/01/30 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
未婚证明范本
2015/06/15 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript