简介:
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
1
2
3
4
5
6
7
8
|
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磁盘使用情况
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/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()
|
脚本二:在远程服务器上执行相应命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/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()
|
使用方法:
1
2
|
python single1.py ip地址 命令
[root@localhost ~] # python single1.py 172.16.22.23 df -TH
|
1
2
3
4
5
6
7
8
9
10
11
|
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列表中对应服务器的磁盘使用情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/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()
|
用法:
1
|
[root@localhost ~] # python ssh.py
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
############################ 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文件内容:
1
2
|
dx 172.16.22.22 22 root larryroot
wt 172.16.22.23 22 root larryroot
|
脚本四:类似于脚本二,在所有远程服务器上执行相应命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/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()
|
用法:
1
|
python ssh .py 命令
|
简单整理到这里通过python的paramiko模块可以很方便的管理服务器,文件的上传下载后续会整理出来。
SSH
下面是通过ssh的dsa或rsa公钥验证批量登录服务器执行命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/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脚本:
1
|
python sshkey.py df -h
|
1
2
3
4
5
6
7
8
|
################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
|