zoukankan      html  css  js  c++  java
  • 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()
    

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

  • 相关阅读:
    springboot 全局异常拦截器,友好异常提示
    java Word 转 PDF格式
    SpringCloud GateWay 使用 网关路由
    spring boot 读写参数到session
    springboot2.5.2 整合 flowable6.6.0 流程引擎
    java 自定义表单 动态表单 表单设计器 工作流引擎 flowable 项目源码
    springboot 运行 jar 包读取外部配置文件
    Spring Boot mybatisconfig 和 log4j 输出sql 日志
    SQL 数据查询语句之字符串拆分
    Enable Script debugging in IE8 at Window 7 operating system
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6425943.html
Copyright © 2011-2022 走看看