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导入txt数据到mysql的方法
Apr 08 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
python中sys.argv参数用法实例分析
May 20 Python
Python中取整的几种方法小结
Jan 06 Python
Python3多线程操作简单示例
May 22 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
python字典排序的方法
Oct 12 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
python进行二次方程式计算的实例讲解
Dec 06 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
常见的jQuery选择器汇总
2014/11/24 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
React实现全选功能
2020/08/25 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python 中如何获取列表的索引
2019/07/02 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
C语言编程题
2015/03/09 面试题
校园歌手大赛策划书
2014/01/17 职场文书
公证委托书模板
2014/04/03 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
2015年项目工作总结
2015/04/29 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL