• [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磁盘使用情况

    1. #!/usr/bin/python 
    2. import paramiko 
    3. hostname='172.16.22.23' 
    4. port=22 
    5. username='root' 
    6. password='larryroot' 
    7. if __name__=="__main__"
    8.         s=paramiko.SSHClient() 
    9.         s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    10.         s.connect(hostname,port,username,password) 
    11.         stdin,stdout,sterr=s.exec_command('df -Th'
    12.         print stdout.read() 
    13.         s.close() 

    脚本二:在远程服务器上执行相应命令

    1. #!/usr/bin/python 
    2. #by larry 
    3. #2011/01/30 
    4. import sys 
    5. import paramiko 
    6.  
    7. hostname=sys.argv[1
    8. command = " ".join(sys.argv[2:]) 
    9. port=22 
    10. username='root' 
    11. password='larryroot' 
    12. if __name__=="__main__"
    13.         s=paramiko.SSHClient() 
    14.         s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    15.         s.connect(hostname,port,username,password) 
    16.         stdin,stdout,sterr=s.exec_command(command) 
    17.         print stdout.read() 
    18.         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列表中对应服务器的磁盘使用情况

    1. #!/usr/bin/python 
    2. #by larry 
    3. #2011/01/30 
    4. import paramiko 
    5. port=22 
    6. username='root' 
    7. file=open('ip.list'
    8. for line in file: 
    9.         hostname=str(line.split('\t')[1]) 
    10.         password=str(line.split('\t')[4]).strip() 
    11.         print "##########################",hostname,"########################" 
    12.         s=paramiko.SSHClient() 
    13.         s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    14.         s.connect(hostname,port,username,password) 
    15.         stdin,stdout,sterr=s.exec_command('df -Th'
    16.         print stdout.read() 
    17.         s.close() 
    18. 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

    脚本四:类似于脚本三,在所有远程服务器上执行相应命令

    1. #!/usr/bin/python 
    2. #by larry 
    3. #2011/01/30 
    4. import paramiko 
    5. import sys 
    6. port=22 
    7. username='root' 
    8. command = " ".join(sys.argv[1:]) 
    9. file=open('ip.list'
    10. for line in file: 
    11.         hostname=str(line.split('\t')[1]) 
    12.         password=str(line.split('\t')[4]).strip() 
    13.         print "##################",hostname,"######################" 
    14.         s=paramiko.SSHClient() 
    15.         s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    16.         s.connect(hostname,port,username,password) 
    17.         stdin,stdout,sterr=s.exec_command(command) 
    18.         print stdout.read() 
    19.         s.close() 
    20. file.close() 

    用法:
    python ssh.py 命令

    简单整理到这里通过python的paramiko模块可以很方便的管理服务器,文件的上传下载后续会整理出来。

    本文出自 “Larry学习之路” 博客,请务必保留此出处http://5iqiong.blog.51cto.com/2999926/769113

    python模块paramiko试用 (2011-05-16 15:27)
    分类: 实例



    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连接

     

    1. #!/usr/bin/env python
    2. import paramiko
    3. #远程服务器
    4. hostname = ‘192.168.0.1’
    5. #端口
    6. port = 22
    7. #用户名
    8. username = ‘Dominic’
    9. #密码
    10. password = ‘123456’
    11. #创建SSH连接日志文件(只保留前一次连接的详细日志,以前的日志会自动被覆盖)
    12. paramiko.util.log_to_file(‘paramiko.log’)
    13. s = paramiko.SSHClient()
    14. #读取know_host
    15. s.load_system_host_keys()
    16. #建立SSH连接
    17. s.connect(hostname,port,username,password)
    18. stdin,stdout,stderr = s.exec_command(‘df -h’)
    19. #打印标准输出
    20. print stdout.read()
    21. s.close()

    由于第一种方式采用密码交互方式登陆远程服务器,使用起来不安全,下面这种方式采用KEY的方式登陆远程服务器,非常安全。

     

    2.连接SSH服务器并远程执行命令-使用rsa私钥加密方式创建SSH连接

    A.生成KEY

    Linux # ssh-keygen –t rsa

     

    B.创建SSH连接

    1. #!/usr/bin/env python
    2. import paramiko
    3. hostname = ‘192.168.0.1’
    4. port = 22
    5. username = ‘Dominic’
    6. pkey_file = ‘/home/Dominic/.ssh/id_rsa’
    7. key = paramiko.RSAKey.from_private_key_file(pkey_file)
    8. s = paramiko.SSHClient()
    9. s.load_system_host_keys()
    10. s.connect(hostname,port,username,pkey=key)
    11. stdin,stdout,stderr = s.exec_command(‘df -h’)
    12. print stdout.read()
    13. print stderr.read()
    14. s.close()

    3.连接SSH服务器并远程执行命令-使用dsa私钥加密方式创建SSH连接

    A.生成KEY

    Linux # ssh-keygen –t dsa

     

    B.创建SSH连接

    1. #!/usr/bin/env python
    2. import paramiko
    3. hostname = ‘192.168.0.1’
    4. port = 22
    5. username = ‘Dominic’
    6. pkey_file = ‘/home/Dominic/.ssh/id_dsa’
    7. key = paramiko.DSSKey.from_private_key_file(pkey_file)
    8. s = paramiko.SSHClient()
    9. s.load_system_host_keys()
    10. s.connect(hostname,port,username,pkey=key)
    11. stdin,stdout,stderr = s.exec_command(‘df -h’)
    12. print stdout.read()
    13. print stderr.read()
    14. 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']

  • 相关阅读:
    js去前后空格
    IE7以上支持Fiddler 监听本地
    IE8 scriptX print 无法使用的bug
    那些相见恨晚的 JavaScript 技巧
    oracle sql
    JS人民币金额转大写程序
    div自适应高度
    .NET Remoting 使用最佳实践,(部分翻译)
    对DataTable 进行Distinct操作
    用财富的眼光看知识管理
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2434101.html
Copyright © 2020-2023  润新知