• paramiko模块


    Paramiko模块

    安装:

    pip3 install paramiko
    

    示例:

    import paramiko
    
    # 创建ssh对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不在know_host文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接服务器
    ssh.connect(hostname='39.107.24.78',port=22,username='root',password='123456')
    
    # 执行命令
    stdin,stdout,stderr = ssh.exec_command('hostname')
    
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result.decode('utf-8'))
    
    
    ### 使用秘钥连接
    # 获取私钥
    private_key = paramiko.RSAKey.from_private_key_file(r'/Users/liuguixiang/.ssh/id_rsa')
    
    ssh.connect(hostname='39.107.24.78',port=22,username='root',pkey=private_key)
    
    
    import paramiko
    from io import StringIO
    
    #私钥
    key = """
    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAqSvjvRx9gljKOWe1vxwXAaL3wnw/0JIWZJz35g+3c8Sd3s43
    vCQh3wqqx7CmglXk4zCvX5feqlnKIPQ98dWU/2Ng+VtkBab8foPE7b+efZ5Pc7XN
    J3+Pjc67He2wnRjAaAJ6SjSfWLSH1wpxvOMn9tWnB0JJRFpnAW1p5Bzfy5kqRU70
    Hmr8GswQgfxtdYcJ2jF8L5fEV8MqZAJ439QMs6Hz2tObTSuFd0FPVTqdSUb+r1Su
    aO90+vrnqGpPgIG9hB/L2PP0KDvDg+MX7lgdfD7fLd9+AJ+uI8i+4iKmllGB6rNO
    4NI3Be+S5HeiOeoXAxtH/q2YKuVgRC+NGY4zbQIDAQABAoIBAH+Njitave94DxH1
    dn3gKiCbxf+oO12BqMy35dpbY1EwoHAMQM3k2H0Zx+bE9Oc06F28qZ6EHemHxfXO
    8p3TEoL1ZXreQ65XV+30YJl6b3/7y6BNJaBwd8bOZxuLyizJKtnBdH9a6gKyK/Ih
    99wZ0lo0gbnhaujU2PGkk8DhXIRfgA4qWCAkV9cSDVBwjYk6DIzggnXzjMMsuy43
    MtWN8r42tPPqeq7bhSVlZarLkgOAAap9d33Pvf8EYiYTevcoLHjPiHhFxFr8qUYw
    KakUv7g/aBj0npA0WjcjqvPe21IRS4LnlSRwccRCBmpQxWERj86r/KzqzHSMdr4v
    zVRM5UECgYEA18+pP4uVgbgwawsJ2LsuBha/Hyc30G4h9Fe+t6yP22OAwQoyoQwe
    -----END RSA PRIVATE KEY-----"""
    
    # 创建ssh对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不在know_host文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 获取私钥
    private_key = paramiko.RSAKey(file_obj=StringIO(key))
    
    # 连接服务器
    ssh.connect(hostname='39.107.24.79',port=22,username='root',pkey=private_key)
    
    # 执行命令
    stdin,stdout,stderr = ssh.exec_command('hostname')
    
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result.decode('utf-8'))
    

    示例二(上传下载文件):

    import paramiko
    
    transport = paramiko.Transport(('39.107.24.78',22))
    transport.connect(username='root',password='123456')
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 上传
    sftp.put('a.txt','/data/a.txt')
    
    # 下载
    sftp.get('/data/a.txt','b.txt')
    
    transport.close()
    

    paramiko类

    import paramiko
    
    class SSHProxy(object):
    
        def __init__(self,hostname,port,username,private_key_path):
            self.hostname = hostname
            self.port = port
            self.username = username
            self.private_key_path = private_key_path
            self.transport = None
    
        def open(self):
            # 获取ssh秘钥
            private_key = paramiko.RSAKey.from_private_key_file(self.private_key_path)
            # 实例化transport对象
            self.transport = paramiko.Transport((self.hostname,self.port))
            # 建立连接
            self.transport.connect(username=self.username,pkey=private_key)
    
        def close(self):
            self.transport.close()
    
        def command(self,cmd):
            """
            执行命令
            :param cmd:
            :return:
            """
            ssh = paramiko.SSHClient()
            ssh._transport = self.transport
            stdin,stdout,stderr=ssh.exec_command(cmd)
            result = stdout.read()
            ssh.close()
            return result
    
        def upload(self,local_path,remote_path):
            """
            上传文件
            :param local_path:
            :param remote_path:
            :return:
            """
            sftp = paramiko.SFTPClient.from_transport(self.transport)
            sftp.put(local_path,remote_path)
            sftp.close()
    
        def __enter__(self):
            self.open()
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            self.close()
    
    
    if __name__ == '__main__':
        with SSHProxy("39.107.24.78",22,"root","/Users/liuguixiang/.ssh/id_rsa") as ssh:
            result = ssh.command("hostname")
            print(result)
    
    
  • 相关阅读:
    vector族函数
    (2)apply函数及其源码
    Eclipse如何修改默认工作空间路径
    怎么将码云的项目导入到eclipse
    在cmd中使用vim编译器
    win8中让cmd.exe始终以管理员身份运行
    cmd命令配置MySQL
    conda的一些指令
    今天遇到的“OS ERROR, permission denied” 如何解决的
    linux的环境变量
  • 原文地址:https://www.cnblogs.com/os-linux/p/11846718.html
Copyright © 2020-2023  润新知