• paramiko模块(远程操作服务器)


    paramiko模块(远程操作服务器)

    1573546506449

    django+paramkio实现远程某些服务器执行命令+上传文件

    用于帮助开发者通过代码远程连接服务器,并对服务器进行操作。

    pip3 install paramiko 
    
    • 远程执行命令【用户名和密码】

      import paramiko
      
      # 创建SSH对象
      ssh = paramiko.SSHClient()
      
      # 允许连接不在know_hosts文件中的主机
      ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      
      # 连接服务器
      ssh.connect(hostname='192.168.16.85', port=22, username='root', password='123456')
      
      # 执行命令
      stdin, stdout, stderr = ssh.exec_command('df')
      # 获取命令结果
      result = stdout.read()
      # 关闭连接
      ssh.close()
      
      print(result.decode('utf-8'))
      
    • 远程执行命令【公钥和私钥】(公钥必须提前上传到服务器)

      import paramiko
      
      private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
      
      # 创建SSH对象
      ssh = paramiko.SSHClient()
      # 允许连接不在know_hosts文件中的主机
      ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      # 连接服务器
      ssh.connect(hostname='192.168.16.85', port=22, username='root', pkey=private_key)
      
      # 执行命令
      stdin, stdout, stderr = ssh.exec_command('df')
      # 获取命令结果
      result = stdout.read()
      
      # 关闭连接
      ssh.close()
      
      print(result)
      
    • 远程上传和下载文件【用户名和密码】

      import paramiko
      
      transport = paramiko.Transport(('192.168.16.85', 22))
      transport.connect(username='root', password='123456')
      sftp = paramiko.SFTPClient.from_transport(transport)
      
      
      # 将location.py 上传至服务器 /tmp/test.py
      # sftp.put('wy.txt', '/data/wy.txt')
      sftp.get('/data/wy.txt', 'xx.txt')
      
      transport.close()
      
    • 远程上传和下载文件【公钥和私钥】

      import paramiko
      
      private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
      
      transport = paramiko.Transport(('192.168.16.85', 22))
      transport.connect(username='root', 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()
      

    补充:通过私钥字符串也可以连接远程服务器。

    key = """-----BEGIN RSA PRIVATE KEY-----
    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
    -----END RSA PRIVATE KEY-----"""
    
    
    import paramiko
    from io import StringIO
    
    private_key = paramiko.RSAKey(file_obj=StringIO(key))
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.16.85', port=22, username='root', pkey=private_key)
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result)
    

    基于xshell连接服务器

    • 用户名和密码

    • 公钥和私钥(rsa)

      • 生成公钥和私钥

        ssh-keygen.exe -m pem
        
        在当前用户家目录会生成: .ssh/id_rsa.pub    .ssh/id_rsa
        
      • 把公钥放到服务器

        ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.16.85 
        
      • 以后再连接服务器时,不需要在输入密码

        ssh root@192.168.16.85
        
  • 相关阅读:
    如何带平均年龄小的团队
    如何带平均年龄大的团队
    Extjs中常用表单介绍与应用
    .NET 应用架构指导 V2[17]
    一个男人的关心的东西
    微软企业库5.0学习笔记(十四)
    .NET 应用架构指导 V2[19]
    微软企业库5.0学习笔记(十五)
    计算机基本图书
    vs添加博客园精华区
  • 原文地址:https://www.cnblogs.com/ciquankun/p/11844361.html
Copyright © 2020-2023  润新知