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

    ssh远程连接

    ssh root@192.168.189.132

    退出远程连接

    exit

    传文件

    scp -rp(r代表目录也拷贝,p代表权限)

    scp -rp aa.txt root@192.168.189.132:/tmp/   拷贝aa.txt到192.168.189.132下的/tmp目录

    堡垒机前戏

    开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

    SSHClient

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

    基于用户名密码连接:

    import paramiko,sys
    
    #创建ssh对象
    ssh = paramiko.SSHClient()
    
    #允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    
    #连接服务器
    ssh.connect(hostname='192.168.189.131',port=22,username='root',password="123456")
    
    #执行命令
    stdin,stdout,stderr = ssh.exec_command('df')
    
    #获取命令结果
    result = stdout.read()
    #打印命令
    sys.stdout.write(result.decode())
    
    ssh.close()  

    第二种基于用户名密码连接:

    import paramiko
    
    if __name__ == '__main__':
        host_ip = '192.168.189.131'
        port = 22
        username1 = 'root'
        password1 = '123456'
    
        transport = paramiko.Transport(host_ip, port)
        transport.connect(username=username1, password=password1)
    
        ssh = paramiko.SSHClient()
        ssh._transport = transport   #ssh._transport指向transport
        stdin,stdout,stderr = ssh.exec_command("df")
        print(stdout.read().decode())
    
        transport.close()
    

      

    SFTPClient

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

    基于用户名密码上传下载

    import paramiko,os,sys
    
    if __name__ == '__main__':
        host_ip = '192.168.189.131'
        port = 22
        username1 = 'root'
        password1 = '123456'
    
        t = paramiko.Transport(host_ip, port)
        t.connect(username=username1, password=password1)
        sftp = paramiko.SFTPClient.from_transport(t)
        remotepath = r'/cc.txt'          #这里一定要有文件名,不然会出现错误
        localpath = os.path.join(os.getcwd(),'markdown.md')
        print(localpath)
        sftp.put(localpath, remotepath)   #上传文件
        sftp.get("/cc.txt",os.path.join(os.getcwd(),"aa.txt"))  #下载文件
        t.close()
    

     通过ssh密钥来连接 

    RSA-非对称密钥验证

    公钥 publick key

    私钥 private key

    192.168.189.131   --------> 192.168.189.132

    私钥                                        公钥

    生成公钥私钥命令:ssh-keygen ,在/root/.ssh下

    拷贝192.168.189.131的公钥到你要登陆的账户下(注意换行)的~目录下.ssh/authorized_keys(更简单的拷贝方法ssh-copy-id root@192.168.189.132)

     基于公钥密钥连接:

    import paramiko,os,sys
    
    
    # with open(r"C:UsersMrs shao.sshid_rsa","r") as f:
    #     print(f.read())
    private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa")  #私钥地址
    
    #创建ssh对象
    ssh = paramiko.SSHClient()
    
    #允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    #连接服务器
    
    ssh.connect(hostname="192.168.189.131",port=22,username="root",pkey=private_key)  #用pkey
    
    stdin,stdout,stderr = ssh.exec_command("df")
    
    result = stdout.read()
    print(result.decode())
    ssh.close()
    

      

     基于公钥密钥上传下载

    import paramiko,os,sys
    
    private_key = paramiko.RSAKey.from_private_key_file(r"C:UsersMrs shao.sshid_rsa") #获取私钥并把公钥放到服务器
    
    
    transport = paramiko.Transport("192.168.189.131",22)
    transport.connect(username="root",pkey=private_key)
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    #将本地文件markdown.md上传至服务器的根目录下/from_window_file
    # sftp.put("markdown.md","/from_window_file")
    
    #将服务器文件/bb.txt下载到本地
    sftp.get("/bb.txt","from_centos")
    transport.close()
    

      

  • 相关阅读:
    JAVA中数据类型转换
    PADS故障解决
    KEIL4.12中添加ULINK2的支持
    身份证号码规则
    用19种编程语言写Hello World
    30年的Hello world
    Java Annotation手册
    线控耳机原理图
    破解EXCEL2007的密码
    [野狐行][内存辅助][二重门更新中][2016/6/1]
  • 原文地址:https://www.cnblogs.com/zj-luxj/p/7460347.html
Copyright © 2011-2022 走看看