Python使用Paramiko模块编写脚本进行远程服务器操作
简介:
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

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Regarding the problem of removing the Python interpreter that comes with Linux systems, many Linux distributions will preinstall the Python interpreter when installed, and it does not use the package manager...

Pylance type detection problem solution when using custom decorator In Python programming, decorator is a powerful tool that can be used to add rows...

About Pythonasyncio...

Using python in Linux terminal...

Loading pickle file in Python 3.6 environment error: ModuleNotFoundError:Nomodulenamed...

Compatibility issues between Python asynchronous libraries In Python, asynchronous programming has become the process of high concurrency and I/O...

Error loading Pickle file in Python 3.6 environment: ModuleNotFoundError:Nomodulenamed...

The problem and solution of the child process continuing to run when using signals to kill the parent process. In Python programming, after killing the parent process through signals, the child process still...
