zoukankan      html  css  js  c++  java
  • Paramiko模块

    python 的paramiko 模块,改模块是基于ssh用于连接远程服务器并执行相关操作


    SSHClient

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

    基于用户名密码的连接:

     1 import paramiko
     2 
     3 # 创建SSH对象
     4 ssh = paramiko.SSHClient()
     5 # 允许连接不在know_hosts文件中的主机
     6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     7 # 连接服务器
     8 ssh.connect(hostname='0.0.0.0', port=22, username='root', password='123456')
     9 
    10 # 执行命令
    11 stdin, stdout, stderr = ssh.exec_command('df')
    12 # 获取命令结果
    13 #标准输出只有在正确的情况下才会有输出,错误的情况下没有
    14 res,err = stdout.read(),stderr.read()
    15 result = res if res else err
    16 print(result.decode())
    17 # 关闭连接
    18 ssh.close()

    如果遇到这样的问题

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())这个函数就能够能好的解决

    解释:

      在linux中直接通过ssh去登录远程,会出现如下的问题:

    输入yes之后:

    输入密码就可以登录。

    在linux中如果有一个文件 /root/.ssh/known_hosts 

     里面就有一个10.0.0.41的相关rsa信息,如果这个文件里有这个安全的签名认证,就可以直接输入密码连接,否则就需要自己做判断是否加入known_hosts

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())就是解决了这个问题,自动添加认证

    在这里,不能执行“top”命令,只能让他执行那种一次性执行完毕的命令

     SFtpClient

      ssh远程传文件命令:

        #r即使是目录也会传,p是会把文件的权限也传过去
    scp -rp -P52113 文件名 root@10.0.0.41:/tmp/
    查看文件内容,目录内容可以用:more ****

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

    基于用户名密码上传下载

    import paramiko
    
    transport = paramiko.Transport(('192.168.5.9', 22))
    transport.connect(username='root', password='123456')
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('笔记', '/tmp/test_from_win')
    # 将remove_path 下载到本地 local_path
    sftp.get('/root/test.txt', 'fromlinux.txt')
    
    transport.close()

     put()方法是上传文件,get()方法是下载文件

    上面两种方式都是用了明文用户名密码,这个是很不安全的。所以可以用密钥去连接

    ssh密钥-----RSA非对称密钥验证

    公钥(public key):是给别人的

    私钥(private key)

    10.0.0.31 ----------》10.0.0.41   这样就可以无密码连接

    私钥        公钥

    在linux中:

    a. linux中生成公钥私钥对:#ssh-keygen(默认保存在/root/.ssh/id_rsa)

    私钥在id_rsa中,公钥在id_rsa.pub中

    b.将本地的公钥添加到远程机器的authorized_keys中,从而实现SSH无密码登录。ssh-copy-id "-p22 root@192.168.5.9"  

    c.利用ssh远程无密码登录:ssh root@192.168.5.9 -p22

    在windows中:

    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file('id_rsa9.txt')
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.5.12', port=22, username='xiaoming', pkey=private_key)
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    print(result.decode())
    # 关闭连接
    ssh.close()
    使用rz/sz命令可以将linux生成的公钥上传到windows上:sz ~/.ssh/id_rsa
    安装rz/sz命令:yum install lrzsz
    然后将得到的id_rsa放到项目当中就可以使用了

  • 相关阅读:
    Spring的认识及基本使用原理
    并发编程面试题(1)
    Java基础面试题(1)
    SET ANSI_NULLS ON 在T-SQL中是什么意思
    MySQL存储过程点滴
    【原创内容】获取爱奇艺视频真实下载地址(分段的)
    【原创内容】获取腾讯视频真实下载地址
    【原创内容】获取优酷视频真实下载地址
    【原创内容】获取百度网盘真实下载地址
    Web移动端使用localStorage缓存Js和CSS文件
  • 原文地址:https://www.cnblogs.com/charles8866/p/8401788.html
Copyright © 2011-2022 走看看