zoukankan      html  css  js  c++  java
  • Python paramiko 模块

    paramiko模块机遇SSH用于连接远程服务器并执行相关操作

    SSHClient

    用于连接远程服务器并执行基本命令

    基于用户名密码连接:

    import paramiko
      
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='host', port=port, username='user', password='password')
      
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
      
    # 关闭连接
    ssh.close()
    #stdin, stdout, stderr表示标准输入,标准输出,错误

    sshclient 封装transport

    import paramiko
    
    transport = paramiko.Transport(('hostname', 22))
    transport.connect(username='wupeiqi', password='123')
    
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    
    stdin, stdout, stderr = ssh.exec_command('df')
    print stdout.read()
    
    transport.close()
    
    SSHClient 封装 Transport
    '''
    和ssh的区别在于
    ssh封装了transport的方法 也就是2 3 5 行
    但是ssh并没有基于sftp的方法,所以只能用基于transport
    '''

    基于公钥密钥连接:

    import paramiko
     
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', key=private_key)
     
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
     
    # 关闭连接
    ssh.close()

    SFTPClient

    用于连接远程服务器并执行上传下载

    基于用户名密码上传下载

    import paramiko
     
    transport = paramiko.Transport(('hostname',22))
    transport.connect(username='wupeiqi',password='123')
     
    sftp = paramiko.SFTPClient.from_transport(transport)#实例化sftp的方法
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('/tmp/location.py', '/tmp/test.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('remove_path', 'local_path')
     
    transport.close()

    基于公钥密钥上传下载

    import paramiko
     
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     
    transport = paramiko.Transport(('hostname', 22))
    transport.connect(username='wupeiqi', pkey=private_key )
     
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('/tmp/location.py', '/tmp/test.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('remove_path', 'local_path')
     
    transport.close()

     结合案例demo

    import paramiko
    import uuid
    class haoroxy(object):
        def __init__(self):
            #初始化绑定账号密码主机端口信息
            self.host = "localhost"
            self.port = 22
            self.username = "chen"
            self.passwd = "chen27"
        def create_file(self):
            filename = str(uuid.uuid4())
            f = open(filename,"w")
            f.write("hello python!")
            f.close()
            return filename
        def update(self):
            # 上传文件时调用创建文件函数返回文件名
            filename = self.create_file()
            # 实例化sftp类
            Up = paramiko.SFTPClient.from_transport(self._transport)
            #上传文件
            Up.put(filename,'/home/chen/aabb.txt')
        def connect(self):
            #链接函数,启动后链接主机,定义一个公共的变量存储链接的通道
            transport = paramiko.Transport((self.host,self.port))
            transport.connect(username=self.username,password=self.passwd)
            self._transport = transport
        def close(self):
            #关闭链接
            self._transport.close()
        def rename(self):
            #更改名称函数
            #创立一个ssh链接
            ssh = paramiko.SSHClient()
            #绑定链接通道
            ssh._transport=self._transport
            #发送命令
            stdin,stdout,stderr = ssh.exec_command('mv /home/chen/aabb.txt /home/chen/11111.txt')
            ssh.close()
        def run(self):
            self.connect()
            self.update()
            self.rename()
            self.close()
    aa = haoroxy()
    aa.run()
    '''
    案例代码
    '''
  • 相关阅读:
    深刻理解ajax的success和error的实质和执行过程
    再次遇到 js报错: expected expression, get ')' 或 get ';', '<'等错误?
    怎样让一行中的 文字 input输入框 按钮button它们在同一个高度上? 它们中的文字 是 垂直居中对齐
    怎样阻止input file文件域的change/onchange事件多次重复执行?
    如何在 messager/alert/confirm等消息提示框中 获取 / 设置 嵌入 html内容中的 input[type=checkbox]等的选中状态?
    异步函数造成的问题: 怎样确保异步执行的FileReader onload成功后才执行后面的语句?
    如何退出vim的宏记录模式
    bs模态框中的form获取或设置表单及其中元素用nam不能用id?
    关于git 的理解3
    关于git的理解2
  • 原文地址:https://www.cnblogs.com/Chen-PY/p/5280715.html
Copyright © 2011-2022 走看看