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放到项目当中就可以使用了

  • 相关阅读:
    1024X768大图 (Wallpaper)
    (Mike Lynch)Application of linear weight neural networks to recognition of hand print characters
    瞬间模糊搜索1000万基本句型的语言算法
    单核与双核的竞争 INTEL P4 670对抗820
    FlashFTP工具的自动缓存服务器目录的功能
    LDAP over SSL (LDAPS) Certificate
    Restart the domain controller in Directory Services Restore Mode Remotely
    How do I install Active Directory on my Windows Server 2003 server?
    指针与指针变量(转)
    How to enable LDAP over SSL with a thirdparty certification authority
  • 原文地址:https://www.cnblogs.com/charles8866/p/8401788.html
Copyright © 2011-2022 走看看