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条件和循环的使用方法
Nov 01 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
Python多继承原理与用法示例
Aug 23 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python向字符串中添加元素的实例方法
Jun 28 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
python实现WebSocket服务端过程解析
Oct 18 Python
详解python内置模块urllib
Sep 09 Python
Python循环之while无限迭代
Apr 30 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的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php中的登陆login实例代码
2016/06/20 PHP
PHP简单实现合并2个数字键数组值的方法
2017/05/30 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jQuery链使用指南
2015/01/20 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
python TCP包注入方式
2020/05/05 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
python怎么判断素数
2020/07/01 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
.NET概念性的面试题
2012/02/29 面试题
小孩百日宴答谢词
2014/01/15 职场文书
社区党员先进事迹
2014/01/22 职场文书
称象教学反思
2014/02/03 职场文书
人事文员岗位职责
2014/02/16 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers