[zz]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
python脚本简单编写:
管理单台服务器:
脚本一:查询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模块可以很方便的管理服务器,文件的上传下载后续会整理出来。
本文出自 “Larry学习之路” 博客,请务必保留此出处http://5iqiong.blog.51cto.com/2999926/769113
python模块paramiko试用
#2011-05-16 磁针石
#承接软件自动化实施与培训等gtalk: ouyangchongwu#gmail.com qq 37391319 博客:oychw.cublog.cn
#版权所有,转载刊登请来函联系
#python qq group: 深圳自动化测试python群:113938272
#武冈深圳qq群:66250781
调试环境:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
paramiko-1.7.6
存在以后在windows上面使用ssh登陆linux自动化的可能,故看了一下paramiko,下面的实例程序通过ssh登陆到服务器,执行uptime命令。
Paramiko果然无法和ssh的王牌模块pexpect相比,可惜pexpect不支持windows,今后会继续优先选择linux作为部署环境。
#!/usr/bin/env python
#2011-05-16 磁针石
#承接软件自动化实施与培训等gtalk: ouyangchongwu#gmail.com qq 37391319 博客:oychw.cublog.cn
#版权所有,转载刊登请来函联系
#python qq group: 深圳自动化测试python群:113938272
#武冈深圳qq群:66250781
1.使用密码的SSH连接
- #!/usr/bin/env python
- import paramiko
- #远程服务器
- hostname = ‘192.168.0.1’
- #端口
- port = 22
- #用户名
- username = ‘Dominic’
- #密码
- password = ‘123456’
- #创建SSH连接日志文件(只保留前一次连接的详细日志,以前的日志会自动被覆盖)
- paramiko.util.log_to_file(‘paramiko.log’)
- s = paramiko.SSHClient()
- #读取know_host
- s.load_system_host_keys()
- #建立SSH连接
- s.connect(hostname,port,username,password)
- stdin,stdout,stderr = s.exec_command(‘df -h’)
- #打印标准输出
- print stdout.read()
- s.close()
由于第一种方式采用密码交互方式登陆远程服务器,使用起来不安全,下面这种方式采用KEY的方式登陆远程服务器,非常安全。
2.连接SSH服务器并远程执行命令-使用rsa私钥加密方式创建SSH连接
A.生成KEY
Linux # ssh-keygen –t rsa
B.创建SSH连接
- #!/usr/bin/env python
- import paramiko
- hostname = ‘192.168.0.1’
- port = 22
- username = ‘Dominic’
- pkey_file = ‘/home/Dominic/.ssh/id_rsa’
- key = paramiko.RSAKey.from_private_key_file(pkey_file)
- s = paramiko.SSHClient()
- s.load_system_host_keys()
- s.connect(hostname,port,username,pkey=key)
- stdin,stdout,stderr = s.exec_command(‘df -h’)
- print stdout.read()
- print stderr.read()
- s.close()
3.连接SSH服务器并远程执行命令-使用dsa私钥加密方式创建SSH连接
A.生成KEY
Linux # ssh-keygen –t dsa
B.创建SSH连接
- #!/usr/bin/env python
- import paramiko
- hostname = ‘192.168.0.1’
- port = 22
- username = ‘Dominic’
- pkey_file = ‘/home/Dominic/.ssh/id_dsa’
- key = paramiko.DSSKey.from_private_key_file(pkey_file)
- s = paramiko.SSHClient()
- s.load_system_host_keys()
- s.connect(hostname,port,username,pkey=key)
- stdin,stdout,stderr = s.exec_command(‘df -h’)
- print stdout.read()
- print stderr.read()
- s.close()
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh.connect("192.168.190.131",22,"root", "birsk0")
ssh.connect("192.168.191.253",22,"andrew", "123456")
stdin, stdout, stderr = ssh.exec_command("uptime")
print stdout.readlines()
ssh.close()
执行结果:
[' 15:22:02 up 49 days, 23:09, 33 users, load average: 6.72, 7.31, 7.75\n']
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号