博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
paramiko上传下载
阅读量:4453 次
发布时间:2019-06-07

本文共 1980 字,大约阅读时间需要 6 分钟。

一、paramiko 上传下载
  • 案例:
    • 实现一个链接中,执行N个命令和N个传输
  • 注意问题:
      • 传输通道是基于已经建立链接的chan上创建的
      • 真正的建立链接,只有transport.connect(username=user, passwd=password) 这一句,需要独立存放在方法中
      • 因此,其他的创建对象什么的,为了避免重复创建,可以写在__init__() 中
#!/usr/bin/env python# -*- coding:utf-8 -*-import osimport sysimport paramikoroot = 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()

 

转载于:https://www.cnblogs.com/qiaogy/p/6295687.html

你可能感兴趣的文章
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>
使用 Bootstrap Typeahead 组件
查看>>
EF不能很好的支持DDD?估计是我们搞错了!
查看>>
ubuntu下基于sqlite3后台的php环境的搭建
查看>>
Qt 静态库与共享库(动态库)共享配置的一个小办法
查看>>
linux_cacti 配置之 安装snmp 服务
查看>>
201407-至今
查看>>
c# 应用事务
查看>>
优化杭州某著名电子商务网站高并发千万级大型数据库经验之- SQL语句优化(转)...
查看>>
DtCms.Model.Article.cs
查看>>
WPF——TargetNullValue(如何在绑定空值显示默认字符)
查看>>
Linux之crontab
查看>>
清除浮动
查看>>
JAVA优化建议
查看>>
Docker --- 安装MySQL
查看>>
CenOS+宝塔(模拟)上线博客项目
查看>>
Linux改变语言设置的命令
查看>>
loadrunner Vugen-Tools General-Options-Replay设置
查看>>
redis限频
查看>>
Floyd判圈算法
查看>>