美文网首页
第十六章 paramiko 模块执行远程主机的命令

第十六章 paramiko 模块执行远程主机的命令

作者: 运维开发_西瓜甜 | 来源:发表于2019-01-03 10:18 被阅读127次

    Paramiko 是用于实现执行远程命令和远程传输文件

    安装

    shell> pip3 install paramiko
    

    执行命令

    1. 基于用户名和密码的连接
    image.png

    封装 Transport

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

    2. 基于公钥秘钥连接

    一定要先建立公钥信任

    import paramiko
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    
    # 信任对方的公钥
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    
    # 创建一个自己当前用户的私钥对象
    
    private_key = paramiko.RSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_rsa')
    
    
    
    # 连接服务器
    ssh.connect(hostname='10.18.46.104', port=22,
                username='root',  # 服务器端的用户
                pkey=private_key  # 本地用户的私钥对象
                )
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df -P')
    
    # 获取命令结果
    result = str(stdout.read(), encoding='utf-8')
    
    # 关闭连接
    ssh.close()
    

    二 文件上传下载

    SFTPClient:

    用于连接远程服务器并进行上传下载功能。

    1. 基于用户名密码上传下载

    import paramiko
    ​
    transport = paramiko.Transport(('10.18.46.104',22))
    transport.connect(username='root',password='redhat')
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('回顾', '/tmp/回顾.txt')
    
    # 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
    sftp.get('/tmp/回顾.txt', 'some.txt')
    
    transport.close()
    

    2. 基于公钥秘钥上传下载

    import paramiko
    
    # 下面的命令可以快速创建密钥对,并用 -t 指定了算法类型为 ecdsa
    ## ssh-keygen -t ecdsa -N "" 
    
    # 创建一个本地当前用户的私钥对象
    private_key = paramiko.ECDSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_ecdsa')
    
    # 创建一个传输对象
    transport = paramiko.Transport(('10.18.46.104',22))
    
    # 使用刚才的传输对象创建一个传输文件的的连接对象
    transport.connect(username='root', pkey=private_key)
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('回顾', '/tmp/回顾.txt')
    
    # 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
    sftp.get('/tmp/回顾.txt', 'some.txt')
    
    transport.close()
    

    相关文章

      网友评论

          本文标题:第十六章 paramiko 模块执行远程主机的命令

          本文链接:https://www.haomeiwen.com/subject/xaoxrqtx.html