• python paramiko 模块


    1.什么是paramiko?

    paramiko模块提供了基于ssh连接,进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。

    pip homepage: http://www.paramiko.org/

    pip github addr: https://github.com/paramiko

    官方推荐安装方法:

    pip install paramiko

     示例代码:

     1.简易ssh功能

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # author heaven
    
    import paramiko
    
    #创建ssh对象
    ssh = paramiko.SSHClient()
    #允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #链接服务器
    ssh.connect(hostname='10.11.1.1',port=2704,username='python',password='123456')
    #定义标准输入,标准输出,错误输出,执行命令
    stdin,stdout,stderr = ssh.exec_command('ls')
    #获取命令执行结果
    result = stdout.read().decode()
    #打印命令执行结果
    print(result)
    #关闭链接
    ssh.close()

    2.简易ftp功能

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # author heaven
    
    import paramiko
    #创建transport对象
    transport = paramiko.Transport(('localhost',2704))
    #连接服务器
    transport.connect(username='python',password='123456')
    #创建ftp对象
    sftp = paramiko.SFTPClient.from_transport(transport)
    #put  将本地的a.txt文件上传到对方服务器指定目录(上传)
    sftp.put('/home/python/a.txt','/home/python/heaven/test.txt')
    
    #get 下载
    #sftp.get('remote_path','local_path')  
    transport.close

    ssh升级版本:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # author heaven
    
    import paramiko
    
    #创建ssh对象
    ssh = paramiko.SSHClient()
    #允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #链接服务器
    ssh.connect(hostname='172.16.25.25',port=2704,username='python',password='123456')
    
    while True:
        try:
            yourinput = input("请输入你要执行的命令: ").strip();
            stdin,stdout,stderr = ssh.exec_command(yourinput);
            if len(yourinput) == 0:
                continue;
            result = stdout.read().decode();
            print(result);
        except KeyboardInterrupt as e:        #注意此处异常的写法,python2与python3中不一样,python3中必须用as
            print('你已经退出登录!  {}'.format(e));
            break
            
    #关闭链接
    ssh.close()

    sftp升级版本:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # author heaven
    
    import paramiko
    
    class Ftp(object):
        def __init__(self):
            self.transport = paramiko.Transport(('localhost',2704))
            self.transport.connect(username='python',password='123456')
            
        
        def put(self):
        #上传
            local_path = input("请输入本地要上传的文件的绝对路径: ").strip()
            remote_path = input("请输入远端服务器文件的绝对路径: ").strip()
            sftp = paramiko.SFTPClient.from_transport(self.transport)
            sftp.put(local_path,remote_path)
            self.transport.close
            
        
    newftp = Ftp()
    newftp.put()        

    使用ssh秘钥免密方式登录

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # author heaven
    
    #在使用此方法登录之前必须要保证两台通信的主机已经完成了秘钥交互,能够远程免密登录
    import paramiko
    
    #创建链接key对象,指定本地的RSA私钥文件,如果建立秘钥对时候有设置有密码,password为设定的密码,如无则不用指定password参数
    pkey = paramiko.RSAKey.from_private_key_file('/home/python/.ssh/id_rsa')
    
    #创建链接对象
    ssh = paramiko.SSHClient()
    
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #使用秘钥链接
    ssh.connect(hostname='11.20.11.11',port=2704,username='python',pkey=pkey)
    
    stdin,stdout,stderr=ssh.exec_command('ls')
    print(stdout.read().decode())
    ssh.close()

    ftp使用key链接

    #!/usr/bin/env python
    #coding:utf8
    #必须先将公钥文件传输到服务器的~/.ssh/authorized_keys中
    import paramiko
    # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
    pkey = paramiko.RSAKey.from_private_key_file('id_rsa_1024')
    
    #创建transport对象绑定主机和端口,指定用户和密钥连接
    transport = paramiko.Transport(('172.16.32.129',2323))
    transport.connect(username='root',pkey=pkey)
    ssh = paramiko.SSHClient()
    ssh._transport = transport  #类属性赋值
    #允许将信任的主机自动加入到known_hosts列表
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    #执行命令
    stdin,stdout,stderr=ssh.exec_command('free -m')
    print(stdout.read().decode())
    ssh.close()
  • 相关阅读:
    开源TinyXML 最简单的新手教程
    2014第14周一开发问题记
    2014第13周日
    140329
    2014第13周五
    2014第13周四Webservice概念问题记
    2014第13周三
    2014第13周二
    2014第13周一
    2014第12周日
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/9590367.html
Copyright © 2020-2023  润新知