使用python的Paramiko模块登陆SSH

paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 
python的paramiko模块可以方便的实现ssh登录,并执行命令。

1. paramiko模块安装

1.1安装pycrypto库

下载地址请戳这里:http://download.csdn.net/detail/oatnehc/8825715

pycrypto库的主页在这里:https://www.dlitz.net/software/pycrypto/

pycrypto库安装方法

python setup.py build && python setup.py install

 

1.2安装paramiko

paramiko下载地址:http://download.csdn.net/detail/oatnehc/8825743 
paramiko库的主页在这里:https://pypi.python.org/pypi/paramiko 
paramiko库的安装方法超级简单。

python setup.py build && python setup.py install

 


2.简单使用

2.1 执行远程命令

    #!/usr/bin/python
    import paramiko

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect("某IP地址",22,"用户名", "口令")
    stdin, stdout, stderr = ssh.exec_command("你的命令")
    print stdout.readlines()
    ssh.close()

 

2.2 上传文件到远程

    #!/usr/bin/python
    import paramiko

    t = paramiko.Transport(("某IP地址",22))
    t.connect(username = "用户名", password = "口令")
    sftp = paramiko.SFTPClient.from_transport(t)
    remotepath='/tmp/test.txt'
    localpath='/tmp/test.txt'
    sftp.put(localpath,remotepath)
    t.close()

 

2.3 上传文件到远程

    #!/usr/bin/python
    import paramiko

    t = paramiko.Transport(("某IP地址",22))
    t.connect(username = "用户名", password = "口令")
    sftp = paramiko.SFTPClient.from_transport(t)
    remotepath='/tmp/test.txt'
    localpath='/tmp/test.txt'
    sftp.get(remotepath, localpath)
    t.close()

 

3.高级用法

通常需要对多个服务器或者虚拟机进行管理,可以采用批量的方式进行。

    #-*- coding: utf-8 -*-  
    #!/usr/bin/python   
    import paramiko  
    import threading  
    def ssh2(ip,username,passwd,cmd):  
        try:  
            ssh = paramiko.SSHClient()  
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  
            ssh.connect(ip,22,username,passwd,timeout=5)  
            for m in cmd:  
                stdin, stdout, stderr = ssh.exec_command(m)  
                out = stdout.readlines()  
                for o in out:  
                    print o,  #屏幕输出
            print '%s\tOK\n'%(ip)  
            ssh.close()  
        except :  
            print '%s\tError\n'%(ip)  
    if __name__=='__main__':  
        cmd = ['echo hello!']#需要执行的命令列表  
        username = "root"  #用户名  
        passwd = "root"    #密码  
        threads = []   #多线程  
        print "Begin excute......" 
        for i in range(1,254):  
            ip = '192.168.1.'+str(i)  
            a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))   
            a.start() 

参考 
http://www.cnblogs.com/xia520pi/p/3805043.html 
http://www.oschina.net/p/paramiko 
http://developer.51cto.com/art/201206/340118.htm

posted @ 2017-03-29 11:24  monster_ygs  阅读(1518)  评论(0编辑  收藏  举报