堡垒机前戏
开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作
paramiko模块是做主机管理的,他模拟了一个ssh.
有两种形式连接形式,
一种通过用户名密码: ssh -p 22 root@hostname
一种是通过密钥的方式: ssh -p 22 -i ~/.ssh/dongjing-shanghai.pem root@kiri_pro01
再连接的的语法上,有两种:
一种是直接将连接的主机地址和端口直接传入
一种是先把主机地址,端口,用户名,密码封装到paramiko.Transport()实例中 SSHClient
通过用户名密码连接的实例代码如下:
直接调用ssh.connect() 方法
                     #!/usr/bin/env python3.5
#__author__:'ted.zhou'
'''
使用paramiko模块,实现SSHClient连接远程服务器
先使用用户名,密码方式
'''
import paramiko ssh = paramiko.SSHClient() # 创建SSH对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 这句很关键, 允许连接不在know_hosts文件中的主机
ssh.connect(hostname='127.0.0.1',port=7272,username='root',password='') # 连接服务器
stdin,stdout,stderr = ssh.exec_command('df') # 执行命令
result = stdout.read() # 获取命令结果
ssh.close() # 关闭连接 print(result.decode()) # 打印结果
                通过paramiko.Transport()封装:
                     #!/usr/bin/env python3.5
#__author__:'ted.zhou'
'''
paramiko模块SSHClient通过用户名密码连接远程服务器,
使用语法Transport()封装
''' import paramiko transport = paramiko.Transport(('127.0.0.1',7272)) # 实例化一个Transport()实例,传入主机的IP或者hostname 和 端口组合的元组,记住一定是元组。
transport.connect(username='root',password='') # 调用connect方法,设置transport的连接方式用户名和密码, ssh = paramiko.SSHClient()
ssh._transport = transport stdin,stdout,stderr = ssh.exec_command('df')
result = stdout.read() print(result.decode())
transport.close()

            通过sshkey方式连接的实例:
        python2.x写法和python3.x不同
        python2.x 代码如下:
                直接调用ssh.connect() 方法
#!/usr/bin/env python3.5
#__author__:'ted.zhou'
'''
使用paramiko.SSHClient()的sshkey方式连接远程服务器 '''
import paramiko # 加载密钥文件
private_key = paramiko.RSAKey.from_private_key_file('/Users/tedzhou/.ssh/id_rsa')
# print(type(private_key))
ssh = paramiko.SSHClient() # 创建SSH对象
#
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 # 开始连接服务器,这里注意再python2.x中是这么写,3.x中报错,应该写成 key_file = '/Users/tedzhou/.ssh/id_rsa'
ssh.connect(hostname='127.0.0.1',port=7272,username='root',key=private_key) # 获取远程主机执行命令的结果
stdin,stdout,stderr = ssh.exec_command('ifconfig')
result = stdout.read()
print(result.decode())
ssh.close()
                python3.x的写法如下:
                     #!/usr/bin/env python3.5
#__author__:'ted.zhou'
'''
使用paramiko.SSHClient()的sshkey方式连接远程服务器 '''
import paramiko # python3.x中就不需要再加载私钥文件了.
# private_key = paramiko.RSAKey.from_private_key_file('/Users/tedzhou/.ssh/id_rsa')
ssh = paramiko.SSHClient() # 创建SSH对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机
# 开始连接服务器
ssh.connect(hostname='kiri_pro01', port=22, username='root', key_filename='/Users/tedzhou/.ssh/dongjing-shanghai.pem')
# 获取远程主机执行命令的结果
stdin,stdout,stderr = ssh.exec_command('ifconfig')
result = stdout.read()
print(result.decode())
ssh.close()
                通过paramiko.Transport()封装:
注释:使用Transport方式连接远程服务器,python2.x和python3.x就一样了,具体代码如下:
 #!/usr/bin/env python3.5

                     import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/Users/tedzhou/.ssh/dongjing-shanghai.pem')
# '/Users/tedzhou/.ssh/dongjing-shanghai.pem'
#封装transport
transport = paramiko.Transport(('127.0.0.1',22)) #这里一定是元组
transport.connect(username='root',pkey=private_key) # 创建SSH连接
ssh = paramiko.SSHClient()
ssh._transport = transport # 获取执行命令的结果
stdin,stdout,stderr = ssh.exec_command('df') result = stdout.read() print(result.decode()) transport.close()
            通过上面例子中,发现使用paramiko.Transport()方法封装后,再调用SSHClinet()方法更好些,因为python2.x和python3.x语法一样
而且下面使用paramiko.SFTPClient()进行文件的上传和下载,使用的语法也是paramiko.Transport()方法
SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
                 import paramiko

                 transport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='') sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path') transport.close()
                基于公钥密钥上传下载
                 import paramiko

                 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

                 transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path') transport.close()
												

python2.0 s12 day8 _ 堡垒机前戏paramiko模块的更多相关文章

  1. python2.0 s12 day8 _ socketserver学习

    Socket 概念 一个socket就是一个点对点的链接.当今,大多数的通信都是基于Internet Protocl,因此大多数的网络Socket都是Internet Protocl(互联网)的通信( ...

  2. python2.0 s12 day8 _ python线程&python进程

    1.进程.与线程区别2.cpu运行原理3.python GIL全局解释器锁4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 6.q ...

  3. Pyhton开发堡垒机之paramiko模块

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...

  4. python-----堡垒机前戏paramiko模块及进阶

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: i ...

  5. 堡垒机前戏——paramiko

    提要:在写堡垒机之前,我们必须要了解paramiko这个第三方库.有关于python的第三方库的安装很简单,可以自行百度. 该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于 ...

  6. 堡垒机之paramiko模块

    一.paramiko简单介绍 场景预设: 很多运维人员平时进行维护linux/unix主机时候,无非通过ssh到相应主机操作,那么一旦主机有成千上百台,那该如何应对,这时候我们需要批处理工具,基于py ...

  7. 堡垒机初识--paramiko模块

    一.paramiko模块 Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作. 1.1 在windows上安装paramiko模块 测试环境: win10 , python ...

  8. 网络编程基础【day09】:堡垒机前戏(十一)

    本节内容 1.堡垒机前戏 2.SSHClient 3.SFTPClient 一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 ...

  9. python2.0 s12 day4

    python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 ...

随机推荐

  1. samba实现跨平台文件共享

    前言:Linux/Unix主机之间实现文件共享我们可以使用NFS,那么,Linux/Unix和Windows主机之间共享文件怎么实现呢,samba就是解决这个问题的. Windows网上邻居依赖的协议 ...

  2. c++之——抽象基类

    在一个虚函数的声明语句的分号前加上 =0:就可以将一个虚函数变成纯虚函数,其中,=0只能出现在类内部的虚函数声明语句处.纯虚函数只用声明,而不用定义,其存在就是为了提供接口,含有纯虚函数的类是抽象基类 ...

  3. Android中自定义控件,三个构造函数

    自定义控件时,最好抽象得彻底,并且编写需严谨,因为可能程序中多处都会引用到它,或者提供给团队中的其他人使用. 其一般步骤为: 1.创建控件的类文件,定义其功能逻辑.一般继承自现有控件或者View 2. ...

  4. mysql 加入远程用户

    USE mysql; GRANT ALL PRIVILEGES ON *.* TO panjing @"%" IDENTIFIED BY "123456"; F ...

  5. window 服务(一)

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...

  6. Linux 网络子系统之结构介绍

    Linux 网络设备驱动程序的体系结构 图片说明如下: 网络协议接口层 网络协议接口层向网络层协议提供统一的数据包收发接口,不论上层协议是ARP还是IP,都通过 dev_queue_xmit() 函数 ...

  7. [uart]3.tty驱动分析

    转自:http://www.wowotech.net/linux_kenrel/183.html 目录: 1 首先分析设备驱动的注册 1.1 uart_register_driver分析 1.2 tt ...

  8. kubernetes daahboard权限限制

    dashboard在多人使用的时候经常遇到误操作的情况,为了对dashboard进行限制,对dashboard进行了权限控制, 这里主要限制只允许pod被删除.1:创建对应权限的ClusterRole ...

  9. pthread_cond_wait()函数的详解

    http://hi.baidu.com/tjuer/item/253cc6d66b921317d90e4483 了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线 ...

  10. 可变长度子网掩码(VLSM)在子网划分中的应用

    在学习可变长度子网掩码时,必须先熟练掌握二进制与十进制的转化.计算机中数据的单位(字节.位)等知识. 一.什么是可变长度子网掩码? 要理解可变长度子网掩码,先要理解子网掩码:要理解子网掩码,先要理解I ...