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()








 

posted on 2017-01-18 10:03  台灯不太亮  阅读(140)  评论(0编辑  收藏  举报

导航