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人人网登录应用实例
Sep 26 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
Python 支付整合开发包的实现
Jan 23 Python
python实现共轭梯度法
Jul 03 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
PyTorch中反卷积的用法详解
Dec 30 Python
Python守护进程实现过程详解
Feb 10 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
python使用BeautifulSoup 解析HTML
Apr 24 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生成带有雪花背景的验证码
2006/10/09 PHP
php文件操作实例代码
2012/05/10 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python如何省略括号方法详解
2020/03/21 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
运动会表扬稿大全
2014/01/16 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
create-react-app开发常用配置教程
2022/06/25 Javascript