• paramiko模块


    该模块可以模拟ssh连接服务器,也可以实现sftp的上传下载功能:

    登录时有两种方式,一是用户名密码登录,二是通过RSA非对称秘钥对实现免密登录

    首先介绍一下哎服务器上怎么实现免密登录:

        1.生成秘钥命令:ssh-keygen(中间没有空格)
            public_key  公钥,发送给需要连接的服务 ,生成位置一般为:/root/.ssh/id_rsa.pub,
                发给其他机器存放位置/.ssh/authorized_keys文件中,复制时注意换行问题
            private_key 秘钥,留在自己的机器上,生成位置一般为:/root/.ssh/id_rsa
        2.免密连接命令 ssh 用户名@IP地址

    下面逐一介绍,并附上源码:

    一、利用paramiko实现ssh功能

      1.用户名密码登录

    # !usr/bin/env python
    # -*-coding:utf-8-*-
    
    import paramiko
    ssh_client = paramiko.SSHClient()
    #允许连接不在know_hosts中的主机
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    #连接服务器
    ssh_client.connect(hostname="10.10.10.10",port=22,username="root",password="root")
    #执行指定命令,返回三个结果,标准输入,标准输出,标准错误,标准输出和标准错误不同时存在
    stdin,stdout,stderr = ssh_client.exec_command("df")
    #读取输出结果
    std_out = stdout.read()
    std_err = stderr.read()
    if len(std_out) == 0:
        print(std_err)
    else:
        print(std_out)
    #关闭服务
    ssh_client.close()
    

      2.RSA免密登录

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

    二、利用paramiko.Transport实现ssh功能

      1.利用用户名密码登录

    import paramiko
    transport = paramiko.Transport(('10.10.10.10', 22))
    transport.connect(username='root', password='root')
    
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    stdin, stdout, stderr = ssh.exec_command('df')
    print(stdout.read())
    
    transport.close()
    

      2.利用RSA免密登录

    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')  #私钥地址  公钥也在同目录下 id_rsa.pub
    transport = paramiko.Transport(('10.10.10.10', 22))
    transport.connect(username='root', pkey=private_key)
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    stdin, stdout, stderr = ssh.exec_command('df')
    std_out = stdout.read()
    std_err = stderr.read()
    if len(std_out) == 0:
        print(std_err)
    else:
        print(std_out)
    transport.close()
    

     三、利用paramiko.Transport实现sftp功能

      1.用户名密码登录

    #!usr/bin/env python
    #-*-coding:utf-8-*-
    ''' 基于用户名密码上传下载 '''
    import paramiko
    #模拟实现ssh中sco
    transport = paramiko.Transport(('10.10.10.10', 22))
    transport.connect(username='root', password='root')
    sftp = paramiko.SFTPClient.from_transport(transport)
    #上传location.py至服务器temp/test.py  本地文件路径 ==> 上传至服务器路径,并且需要重新命名
    sftp.put("location.py","/temp/test.py")
    #下载服务器test_path至本地local_path
    sftp.get("/temp/test_path","local_path")
    
    transport.close()
    

      2.RSA免密登录

    import paramiko
    ''' 基于公钥密钥上传下载  '''
    private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
    
    transport = paramiko.Transport(('10.10.10.10', 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()
    

      

  • 相关阅读:
    VUe兄弟通信
    vue组件之间的通信, 父子组件通信,兄弟组件通信
    js 数组 map方法
    vue生命周期
    使用JQuery获取被选中的checkbox的value值
    C#中struct和class的区别详解 (转载)
    C# 增加时间的三个方法
    c# 事件3
    C# 事件2
    C# 事件
  • 原文地址:https://www.cnblogs.com/bert227/p/9959065.html
Copyright © 2020-2023  润新知