zoukankan      html  css  js  c++  java
  • 人生苦短,我用python-- Day9

    目录                            

    paramiko模块

      ssh工具

      scp工具

    paramiko

    作用:批量管理,该模块基于SSH用于连接远程服务器并执行相关操作

    写一个基于用户名密码的ssh工具

     1 # Author:Sean sir
     2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
     3 import paramiko
     4 # 创建SSH对象
     5 ssh = paramiko.SSHClient()
     6 # 允许连接不在know_hosts文件中的主机,当连接一个机器的时候,如果是第一次连接,那么系统会弹出此主机不再know_hosts的文件中
     7 # 询问是否继续,如果是的话,第二次在连接的时候就不会有这种情况了。
     8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     9 # 连接服务器
    10 ssh.connect(hostname='192.168.16.85',port=22,username='root',password='zyw@123')
    11 # 执行命令,执行命令会返回3个结果,包括标准输入、标准输出、标准错误,如果没有报错,
    12 # 那么标准错误则为空;如果有错误,那么标准输出就为空
    13 stdin,stdout,stderr = ssh.exec_command('df')
    14 # 获取命令结
    15 result = stdout.read()
    16 # 关闭连接
    17 ssh.close()
    18 # 打印标准输出的结果
    19 print(result.decode())

    写一个基于公钥私钥的ssh工具

    首先要生成一个公钥

     1 bogon:~ sean$ ssh-keygen 
     2 Generating public/private rsa key pair.
     3 Enter file in which to save the key (/Users/sean/.ssh/id_rsa): 
     4 /Users/sean/.ssh/id_rsa already exists.
     5 Overwrite (y/n)? y
     6 Enter passphrase (empty for no passphrase): 
     7 Enter same passphrase again: 
     8 Your identification has been saved in /Users/sean/.ssh/id_rsa.
     9 Your public key has been saved in /Users/sean/.ssh/id_rsa.pub.
    10 The key fingerprint is:
    11 SHA256:q+Wvt+pXBO+c32Lvha9jp85teBwdYAUpk1wP+IsnmPw sean@seandeMacBook-Pro-2.local
    12 The key's randomart image is:
    13 +---[RSA 2048]----+
    14 |          . +++. |
    15 |          .* +o  |
    16 |           o= .. |
    17 |            o. . |
    18 |        S o+... o|
    19 |         = o=o o.|
    20 |        o ..o..+o|
    21 |       +  oE .BoB|
    22 |      ..=*o. +=@=|
    23 +----[SHA256]-----+

    生成公钥后,我们会在当前目录下的宿主目录下看到一个隐藏的ssh文件夹,文件夹中有两个文件,分别为:“id_rsa”和“id_rsa.pub”,前者是私钥,我们自己留着

    后者为公钥我们把他传到想要远程的服务器的对应用户下即可了。

    写一个支持公钥私钥的ssh工具:

     1 # Author:Sean sir
     2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
     3 import paramiko
     4 # 创建SSH对象
     5 ssh = paramiko.SSHClient()
     6 # 指定本机的私钥目录
     7 key = paramiko.RSAKey.from_private_key_file('/Users/sean/.ssh/id_rsa')
     8 # 允许连接不在know_hosts文件中的主机,当连接一个机器的时候,如果是第一次连接,那么系统会弹出此主机不再know_hosts的文件中
     9 # 询问是否继续,如果是的话,第二次在连接的时候就不会有这种情况了。
    10 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    11 # 连接服务器,把密码改成指定的key就可以了
    12 ssh.connect(hostname='192.168.16.85',port=22,username='sean',pkey=key)
    13 # 发送一个命令到服务器端
    14 stdin,stdout,stderr = ssh.exec_command('ls -a')
    15 # 获取执行结果
    16 result = stdout.read()
    17 # 打印执行结果
    18 print(result.decode())
    19 # 关闭连接
    20 ssh.close()

    写一个基于公钥私钥或用户名密码的连接工具

     1 # Author:Sean sir
     2 # 导入paramiko模块,前提是本机首先要安装了paramiko模块,才能导入
     3 import paramiko
     4 # 生成一个服务器地址,加上下面transport.connect方法,才真正和服务器连接上
     5 transport = paramiko.Transport(('192.168.16.85',22))
     6 # 如果想用基于秘钥的方式连接,就指定一下秘钥地址
     7 # private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     8 # 连接服务器,把密码改成指定的key就可以了
     9 # 如果想用秘钥的方式连接,使用下面的方式
    10 # transport.connect(username='wupeiqi', pkey=private_key )
    11 # 使用密码的方式进行连接
    12 transport.connect(username='root',password='zyw@123')
    13 # 创建一个sftp的对象
    14 sftp = paramiko.SFTPClient.from_transport(transport)
    15 # 把本地的xinzhiyu_tmp.txt文件,上传到服务器的/tmp/xinzhiyu_tmp.txt位置,并命名
    16 # sftp.put('xinzhiyu_tmp.txt','/tmp/xinzhiyu_tmp.txt')
    17 # 下载服务器的/tmp/test.py文件,到本地的当前目录,并命名为a.txt
    18 sftp.get('/tmp/test.py','a.txt')
    19 # 关闭连接
    20 transport.close()
  • 相关阅读:
    playbook配置不同系统版本的yum源配置
    使用playbook部署lamp
    ansible常用模块
    部署Ansible
    Ansible介绍与安装
    lamp
    mysql主从
    mysql进阶命令
    mysql基础命令
    Dockerfile制作http镜像(以alpine做底层镜像为例)
  • 原文地址:https://www.cnblogs.com/xinzhiyu/p/5878347.html
Copyright © 2011-2022 走看看