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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
python密码错误三次锁定(实例讲解)
Nov 14 Python
Python reduce()函数的用法小结
Nov 15 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python retrying模块的使用方法详解
Sep 25 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
python生成word合同的实例方法
Jan 12 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
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
微信小程序实现文件、图片上传功能
2020/08/18 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
Python isinstance判断对象类型
2008/09/06 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python descriptor(描述符)的实现
2020/11/15 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
模范教师事迹材料
2014/02/10 职场文书
团日活动总结书格式
2014/05/08 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
土地租赁意向书
2014/07/30 职场文书
遗嘱格式范本
2015/08/07 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
图解上海144收音机
2021/04/22 无线电