• pamamiko的学习笔记


    pamamiko的学习笔记

    Paramiko包含两个核心组件,一个为SSHClient类,另一个为SFTPClient类,
    一,paramiko的连接有两种方式,一种是通过paramiko.SSHClient()函数,另外一种是通过paramiko.Transport()函数

    【SSHClient类】

    该类封装了传输,通道,及SFTPClient的校验,建立方法,通常用于执行远程命令,

    client=paramiko.SSHClient()
    client.load_system_host_keys()
    client.connect('172.25.254.1')
    stdin,stdout,stderr=client.exec_command('ls -l')                                                       
    

    如果设置链接的远程主机没有本地主机密钥,需要添加一下

    ssh=paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    

    【SFTPClient类】

    1)from_transport方法:
    创建一个已连通的SFTP客户端通道,
    例子说明:

    t=paramiko.Transport("172.25.254.1")
    t.connect(username="root",password="redhat")
    sftp=paramiko.SFTPClient.from_transport(t)
    

    put:上传本地文件:
    get:下载远程文件到本地
    mkdir :在服务端创建目录
    remove:删除服务端目录
    使用密码的方式登录

    [root@desktop0 420]# cat c.py 
    #!/usr/bin/env python
    #coding=utf8
    import paramiko
    hostname='172.25.254.1'
    port=22
    username='root'
    password='redhat'
    #创建SSH连接日志(只保留前一次的详细日志,以前的日志会被覆盖)
    paramiko.util.log_to_file('paramiko.log')
    s=paramiko.SSHClient()
    s.load_system_host_keys()#读取know_host
    #s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 如果没有在know_host文件里自动加进去
    s.connect(hostname,port,username,password)
    stdin,stdout,stderr=s.exec_command('df -h')#执行命令
    print stdout.read()
    s.close()
    

    运行结果:

    [root@desktop0 420]# python c.py 
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root  6.7G  2.0G  4.4G  32% /
    tmpfs                         246M     0  246M   0% /dev/shm
    /dev/vda1                     485M   34M  426M   8% /boot
    

    使用证书的方式登录:
    做一个key认证,把公钥拷贝给远程主机。

    #!/usr/bin/env python
    import paramiko
    hostname='172.25.254.1'
    port=22
    username='root'
    key_file='/root/.ssh/id_rsa'
    key=paramiko.RSAKey.from_private_key_file(key_file)
    s=paramiko.SSHClient()
    s.load_system_host_keys()
    s.connect(hostname,port,username,pkey=key)
    stdin,stdout,stderr=s.exec_command('df -h')
    print stdout.read()
    print stderr.read()
    s.close()
    

    实现单个文件的上传下载

    [root@desktop0 420]# cat 1.py 
    #!/usr/bin/env python
    import paramiko
    scp=paramiko.Transport(('172.25.254.1',22))
    scp.connect(username='root',password='redhat') 
    sftp=paramiko.SFTPClient.from_transport(scp) #创建一个sftp客户端对象,通过ssh transport操作远程文件;
    sftp.get('/mnt/406/kk.sh','/mnt/file')
    sftp.put('/mnt/mysql.py','/mnt/mimi')
    scp.close()
    

    一个目录下多个文件上传下载示例:

    [root@desktop0 420]# cat 2.py 
    #!/usr/bin/env python
    #coding=utf8
    import paramiko
    import datetime
    import os
    hostname='172.25.254.1'
    username='root'
    password='redhat'
    port=22
    

    当本地没有mimi目录时会报错

    local_dir='/mnt/mimi/' 
    remote_dir='/mnt/406/'
    t=paramiko.Transport((hostname,port))
    t.connect(username=username,password=password)
    sftp=paramiko.SFTPClient.from_transport(t)
    files=sftp.listdir(remote_dir)
    for f in files:
        print '################################'
        print 'beginning to download file from %s %s'%(hostname,datetime.datetime.now())
        print 'downloading file',os.path.join(remote_dir)
        sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))
        print ''
        print '#####################################'
    t.close()
    
    

    注意:当下载或上传单个远程文件的时候要指定文件下载到本地的文件名,不能指定目录。否则会报错

  • 相关阅读:
    DetachedCriteria的使用
    Windows 9立即公布了
    加壳学习笔记(三)-简单的脱壳思路&调试思路
    用异或来交换两个变量能提快速度是错误的
    珍爱生命,举手之劳__怎样优雅的叫优步专车
    【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式。
    HDU 5311 Hidden String (优美的暴力)
    ChargeSystem——One,Two,Three
    GCC编译uboot出现(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'错误的解决的方法
    java中commons-beanutils的介绍
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5703679.html
Copyright © 2020-2023  润新知