zoukankan      html  css  js  c++  java
  • Python Paramiko模块

    代码来自http://www.cnblogs.com/wupeiqi/articles/4356675.html

    今天学到了一个运维方面的利器:python的paramiko模块。

    paramiko可以远程连接服务器系统并执行相应操作

    paramiko远程连接服务器的方式有两种:用户名密码连接、ssh_key连接。

    先看使用用户名密码进行连接方法:

     1 #用户名和密码连接
     2 import paramiko
     3 
     4 #创建一个ssh对象
     5 ssh = paramiko.SSHClient()
     6 #允许连接不在know_hosts文件中的主机
     7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     8 #连接服务器
     9 ssh.connect('192.168.1.22',port=22,username='root',password='123456')
    10 #使用exex_command方法来执行要在服务器执行的命令,并返回一个元组(包含输入的命令,命令正确时的返回值,命令出错时出错信息)
    11 stdin,stdout,stderr = ssh.exec_command('df -h')
    12 #输出命令返回值
    13 print stdout.read()
    14 #关闭ssh连接
    15 ssh.close()
    用户名和密码连接

    用户名密码连接后,上传下载文件:

     1 #用户名密码连接
     2 #使用paramiko的SFTPClient方法实现
     3 
     4 #上传文件
     5 import paramiko
     6 
     7 #创建一个传输对象
     8 t = paramiko.Transport(('182.92.219.86',22))
     9 #连接服务器
    10 t.connect(username='wupeiqi',password='WOshiniba8')
    11 #实例化一个sftp对象
    12 sftp = paramiko.SFTPClient.from_transport(t)
    13 #sftp使用put方法上传文件
    14 sftp.put('/tmp/test.py','/tmp/test.py')
    15 #关闭连接
    16 t.close()
    17 
    18 
    19 #下载文件
    20 import paramiko
    21 
    22 t = paramiko.Transport(('182.92.219.86',22))
    23 t.connect(username='wupeiqi',password='WOshiniba8')
    24 sftp = paramiko.SFTPClient.from_transport(t)
    25 sftp.get('/tmp/test.py','/tmp/test2.py')
    26 t.close()
    27 
    28 
    29 
    30 
    31 #paramiko的SFTPClient其他常用方法
    32 sftp.mkdir('/home/userdir',0755)  #创建名为userdir的目录,权限为0755
    33 sftp.remove('/home/userdir')  #删除名为userdir的目录
    34 sftp.rename('test.py','testfile.py')  #将test.py重命名为testfile.py
    35 sftp.stat('/home/testfile.py')   #获取testfiel.py文件的信息
    36 sftp.listdir('/home')   #获取home目录列表,以python的List形式返回
    上传和下载文件

    再来看看使用ssh_key连接。使用这种连接方式的关键是使用密钥认证。例如:

    要使用a服务器通过密钥来访问b服务器,就要在a服务器上生成密钥对,并将a服务器上生成的公钥发送给b服务器,这样a服务器就可以不通过账号密码直接访问b服务器了

    注:第一次访问b服务器的时候还是需要输入用户名密码的,之后才不需要使用用户名密码

    生成密钥对的过程:

    1 #bash下设置密钥过程:
    2 ssh-keygen -t rsa  ====>生成密钥对(rsa和rsa.pub)
    3 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.23     ===>把生成的公钥发送给要设置密钥登录的服务器(-i:指定公钥文件路径)
    生成密钥对

    使用ssh_key进行连接:

     1 import paramiko
     2 
     3 #私钥文件路径
     4 private_key_path = '/root/.ssh/id_rsa'
     5 #从私钥文件读取私钥
     6 key = paramiko.RSAKey.from_private_key_file(private_key_path)
     7 
     8 #创建一个ssh对象
     9 ssh = paramiko.SSHClient()
    10 #允许连接不在know_hosts文件中的主机
    11 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    12 #连接服务器
    13 ssh.connect(hostname='192.168.1.22',port=22,username='root',pkey=key)
    14 stdin,stdout,stderr = ssh.exec_command('df -h')
    15 print stdout.read()
    16 ssh.close()
    ssh_key连接

    ssh_key连接后,上传下载文件:

     1 #密钥连接
     2 
     3 #上传文件
     4 import paramiko
     5 
     6 pravie_key_path = '/home/auto/.ssh/id_rsa'
     7 key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
     8 
     9 t = paramiko.Transport(('182.92.219.86',22))
    10 t.connect(username='wupeiqi',pkey=key)
    11 sftp = paramiko.SFTPClient.from_transport(t)
    12 sftp.put('/tmp/test3.py','/tmp/test3.py')
    13 t.close()
    14 
    15 
    16 
    17 #下载文件
    18 import paramiko
    19 
    20 pravie_key_path = '/home/auto/.ssh/id_rsa'
    21 key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
    22 
    23 t = paramiko.Transport(('182.92.219.86',22))
    24 t.connect(username='wupeiqi',pkey=key)
    25 sftp = paramiko.SFTPClient.from_transport(t)
    26 sftp.get('/tmp/test3.py','/tmp/test4.py')
    27 t.close()
    上传和下载文件
  • 相关阅读:
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    Matlab norm 用法小记
    C51存储器类型 MCS51单片机物理存储器区域
    MATLAB 中NORM运用
    poj2031
    poj1039
    poj3122
    poj3980
  • 原文地址:https://www.cnblogs.com/MacoLee/p/5614197.html
Copyright © 2011-2022 走看看