• 通过paramiko模块操作服务器


    用于帮助开发者通过代码远程连接服务器,并对服务器进行操作。

    如果下面运行错误了,可以看我另外一篇文章有解决办法解决paramiko连接远程服务器错误

    pip3 install paramiko
    
    import paramiko
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在konw_hosts文件中的主机,意思就是平时你在服务器用ssh连接一台新机子的时候,会有提示,用下面的代码则是取消提示。
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    """
    hostname:远程服务器ip地址
    port:22  固定
    username:用户名
    password:密码
    """
    ssh.connect(hostname='127.0.0.1',port=22,username='root',password='123456')
    
    # 执行命令,返回输入,输入,错误
    stdin,stdout,stderr = ssh.exec_command('ifconfig') #要执行什么命令修改这个即可
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result.decode('utf-8'))
    

    远程上传下载文件【用户名和密码】

    import paramiko
    
    # 创建SSH对象
    transport = paramiko.Transport(('127.0.0.1',22))  #改为你自己的远程服务器ip地址和端口
    transport.connect(username='root',password='123456') #改为你自己的远程服务器用户名和密码
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将本地lw.txt 上传至服务器 /home/liuwei/data/lw.txt 必须加文件名
    #sftp.put('lw','/home/liuwei/data/lw.txt')
    
    # 将/home/liuwei/data/lw.txt 下载到本地xx.txt
    sftp.get('/home/liuwei/data/lw.txt','xx.txt')
    
    transport.close()
    

    远程执行命令【公钥和私钥】(公钥必须提前上传到服务器)

    生成公钥和私钥命令

    ssh-keygen.exe -m -pem
    
    生成两个文件
    /c/Users/Administrator/.ssh/id_rsa
    /c/Users/Administrator/.ssh/id_rsa.pub
    
    

    把公钥放到服务器命令

    ssh-copy-id -i /c/Users/Administrator/.ssh/id_rsa.pub root@127.0.0.1  #改为你自己的用户名@远程服务器ip地址
    

    服务器查看上传后的公钥

    liuwei@liuwei-virtual-machine:~$ cd .ssh/
    liuwei@liuwei-virtual-machine:~/.ssh$ dir
    authorized_keys
    liuwei@liuwei-virtual-machine:~/.ssh$ cat authorized_keys 
        就可以查看公钥内容了
    
    

    以后再连接服务器时不需要再输入密码了

    ssh root@127.0.0.1  #改为你自己的用户名@远程服务器ip地址
    

    远程执行命令【公钥和私钥】[公钥必须提前上传到服务器]

    import paramiko
    
    #私钥的存放位置
    private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接远程服务器
    ssh.connect(hostname='127.0.0.1', port=22, username='root', pkey=private_key) #改为你自己的远程服务器ip地址和用户名
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result)
    

    远程上传下载文件【公钥和私钥】

    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file(r'C:/Users/Administrator/.ssh/id_rsa')
    
    transport = paramiko.Transport(('127.0.0.1', 22))  #改为你自己的远程服务器ip地址和端口
    transport.connect(username='root', pkey=private_key) #改为你自己的远程服务器用户名
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将本地lw文件 上传至服务器 /home/liuwei/data/lw.txt
    sftp.put('lw', '/home/liuwei/data/lw.txt')
    
    # 将服务器路径下文件 下载到本地 本地文件为lw.txt
    # sftp.get('/home/liuwei/data/lw.txt', 'lw.txt')
    
    transport.close()
    

    补充:通过私钥字符串也可以连接远程服务器

    key = """-----BEGIN RSA PRIVATE KEY-----
    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
    -----END RSA PRIVATE KEY-----"""
    
    
    import paramiko
    from io import StringIO
    
    private_key = paramiko.RSAKey(file_obj=StringIO(key))  #把秘钥写在内存中
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='127.0.0.1', port=22, username='root', pkey=private_key) #改为你自己的远程服务器ip地址和用户名
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()
    
    print(result)
    
    以后拿着这个脚本就可以在任何地方使用
    

    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    世界上最帅的人是谁?
    Java 常量池存放的是什么
    刚 安装 Oracle时,登录会出现的问题, ora-28000: the account is locked
    使用MyBatis Generator自动创建代码
    1.2---翻转字符串(CC150)
    1.1---判断字符串是否所有字符都不相同(CC150)
    1.8---字符串是否是旋转而成(CC150)
    1.7---将矩阵元素为0的行列清零0(CC150)
    String和StringBuffer的转换
    Linux下端口被占用解决
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13649159.html
Copyright © 2020-2023  润新知