• paramiko模块


    该模块基于ssh,用于连接远程服务器并执行相关操作

    1,sshCLIENT,基于用户名和密码连接

    1.1

    import paramiko
    # 该模块基于ssh,用于连接远程服务器并执行相关操作
    
    ssh = paramiko.SSHClient()
    # 创建ssh对象
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 允许ssh连接不在known_hosts文件中的主机
    ssh.connect(hostname="10.1.1.99", port=22, username="root", password="123456")
    # 连接服务器
    
    stdin, stdout, stderr = ssh.exec_command("df -hT")
    # 执行命令
    
    result = stdout.read() # 获取结果
    print(result.decode())
    ssh.close()  # 关闭连接
    

      1.2,sshclient封装transport

    import paramiko
    
    transport = paramiko.Transport(('10.1.1.99', 22))
    transport.connect(username='root', password='123456')
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    stdin, stdout, stderr = ssh.exec_command("ip ro sh")
    # 执行命令
    result = stdout.read() # 获取结果
    print(result.decode())
    ssh.close()  # 关闭连接
    View Code

    2, SFTPclient用于连接远程服务器,执行上传下载

    import paramiko
    
    transport = paramiko.Transport(('10.1.1.99', 22))
    transport.connect(username='root', password='123456')
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    sftp.put('paramiko-test.txt', '/root/yn/f1')
    # 上传本地文件到远程服务器
    sftp.get('/root/yn/f1', 'paramiko-test.txt')
    # 把远程服务器的文件下载到本地
    sftp.close()

    # 注意不论是上传还是下载,目标location不能为目录,必须是文件。不然没法写入,会报错!

    上述不论是登录执行命令还是上传和下载也好,密码都要明文输入,这样就带来了安全隐患。

    3, 基于公钥密钥的连接

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

     

    注意思路:这里是把linux主机上的私钥拷贝过来的,也就相当于把window的公钥发给了linux,然后去连接,linux,(当然windows也可以利用Xshell来产生公钥进行连接linux)这里尤其要注意的点是在linux的主机上,一定不要忘了把自己的公钥拷贝到authorized_keys这个验证文件里面,否则会报错!这是浪费了一个下午的时间和精力得来的经验!!!

    4, 基于公钥进行上传和下载

    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
    transport = paramiko.Transport(('10.1.1.200', 22))
    transport.connect(username='yn', pkey=private_key)
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # sftp.put("paramiko-test.txt", "/home/yn/recv.txt")  # 上传文件
    sftp.get("/home/yn/recv.txt", "paramiko.txt")  # 下载文件
    
    transport.close()
    

      注意:不管是上传还是下载目标文件必须要写。

  • 相关阅读:
    卷积操作特征图输出大小
    python函数式编程
    python函数
    列表和元组
    Crontab 执行时没有环境变量!
    github 解决 Agent admitted failure to sign using the key
    Lightgbm 随笔
    btrfs-snapper 实现Linux 文件系统快照回滚
    Ansible playbook API 开发 调用测试
    Linux终端下安装jdk
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6425943.html
Copyright © 2020-2023  润新知