zoukankan      html  css  js  c++  java
  • paramiko上传下载


    一、paramiko 上传下载
    • 案例:
      • 实现一个链接中,执行N个命令和N个传输
    • 注意问题:
        • 传输通道是基于已经建立链接的chan上创建的
        • 真正的建立链接,只有transport.connect(username=user, passwd=password) 这一句,需要独立存放在方法中
        • 因此,其他的创建对象什么的,为了避免重复创建,可以写在__init__() 中
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import os
    import sys
    import paramiko
    
    root = os.path.dirname(os.path.abspath('__file__'))
    sys.path.append(root)
    
    
    class Myserver:
        def __init__(self, host, port, username='root', passwd='redhat'):
            """
            ssh_obj 放在这里,因为这里只是创建一个对象,没有真正的connect
            """
            self.passwd = passwd
            self.username = username
            self.transport = paramiko.Transport((host, port))
            self.ssh_obj = paramiko.SSHClient()
            self.sec_key = paramiko.RSAKey.from_private_key_file(os.path.join(root, 'id_rsa'))
    
        def create_connect(self, conn_type='passwd'):
            """
            :param conn_type: 默认为密码链接,也可以选择秘钥链接
            """
            if conn_type == 'passwd':
                self.transport.connect(username=self.username, password=self.passwd)
            elif conn_type == 'sec_key':
                self.transport.connect(username=self.username, pkey=self.sec_key)
            else:
                print('type error')
    
        def close_connect(self):
            self.transport.close()
    
        def exec_shell(self, command):
            self.ssh_obj._transport = self.transport
            stdin, stdout, stderr = self.ssh_obj.exec_command(command)
            data = stdout.read().decode()
            if not data:
                data = stderr.read().decode()
            print(data)
            return data
    
        def trans_file(self, src_file, dst_file):
            """ 源码解释说,从一个打开的chan中创建一个传输通道,即首先该通道要先连接 """
            sftp = paramiko.SFTPClient.from_transport(self.transport) # 只是单纯的从已经建立的链接中获取一个传输通道
            sftp.put(src_file, dst_file)
    
    
    def main():
        server_obj = Myserver('192.168.10.202', 22)
        server_obj.create_connect()
        server_obj.exec_shell('hostname')
        server_obj.trans_file('s1.py', '/root/qiaogy2.py')
        server_obj.close_connect()
    
    
    if __name__ == '__main__':
        main()
    








  • 相关阅读:
    【转载】uboot的工具mkimage使用方法
    u-boot-2010.3移植到Tiny6410问题总结
    【转载】 GNU GCC 选项说明
    【转载】GCC 预处理器选项
    用kermit通过串口往nandflash任意地址里烧写任何文件!
    自己写Tiny6410的Bootloader总结!
    ARM常用汇编指令介绍
    Ubuntu14.04和Tiny6410挂载NFS服务!
    Tiny 6410的Linux学习总结!
    Tiny6410下的第一个Linux驱动程序
  • 原文地址:https://www.cnblogs.com/qiaogy/p/6295687.html
Copyright © 2011-2022 走看看