python2.0 s12 day8 _ 堡垒机前戏paramiko模块
堡垒机前戏
开发堡垒机之前,先来学习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模块的更多相关文章
- python2.0 s12 day8 _ socketserver学习
Socket 概念 一个socket就是一个点对点的链接.当今,大多数的通信都是基于Internet Protocl,因此大多数的网络Socket都是Internet Protocl(互联网)的通信( ...
- python2.0 s12 day8 _ python线程&python进程
1.进程.与线程区别2.cpu运行原理3.python GIL全局解释器锁4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 6.q ...
- Pyhton开发堡垒机之paramiko模块
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...
- python-----堡垒机前戏paramiko模块及进阶
堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: i ...
- 堡垒机前戏——paramiko
提要:在写堡垒机之前,我们必须要了解paramiko这个第三方库.有关于python的第三方库的安装很简单,可以自行百度. 该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient 用于 ...
- 堡垒机之paramiko模块
一.paramiko简单介绍 场景预设: 很多运维人员平时进行维护linux/unix主机时候,无非通过ssh到相应主机操作,那么一旦主机有成千上百台,那该如何应对,这时候我们需要批处理工具,基于py ...
- 堡垒机初识--paramiko模块
一.paramiko模块 Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作. 1.1 在windows上安装paramiko模块 测试环境: win10 , python ...
- 网络编程基础【day09】:堡垒机前戏(十一)
本节内容 1.堡垒机前戏 2.SSHClient 3.SFTPClient 一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 ...
- python2.0 s12 day4
python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 ...
随机推荐
- GPIO实验(一)
目标:点亮LED1.看原理图,找到对应的引脚和寄存器2.a.配置寄存器为输入/出引脚 GPFCON[9:8]=0b01 b.设置输出高/低电平 GPDAT[4]=0b0 1.预处理2.编 ...
- Mixing ASP.NET Webforms and ASP.NET MVC
https://www.packtpub.com/books/content/mixing-aspnet-webforms-and-aspnet-mvc *********************** ...
- Python以不可见字符作为列分割符
# -*- coding: utf-8 -*- import sys import time CTRL_A='\x01' CTRL_B='\x02' thedate = '' thetime = '' ...
- C/C++/C#/Python日志框架
俗话说,打得一手好log才是一个优秀的程序员. **打log的目的是为了迅速排错或在有争议时拿出证据证明自己.基于这个目的,log不在多,只要抓住一切对自己有利的信息,就可以了.** 日志框架列表 C ...
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- 网页图表Highcharts实践教程标之加入题副标题版权信息
网页图表Highcharts实践教程标之加入题副标题版权信息 Highcharts辅助元素 辅助元素图表的非必要元素.如标题.版权信息.标签.加载动态.它们不和图表数据发生关联,仅仅是额外说明一些基 ...
- Entity Framework应用:使用Code First模式管理存储过程
在EF中使用存储过程和使用视图是很相似的,一般会使用Database对象上的两个方法:SqlQuery和ExecuteSqlCommand.为了从存储过程中读取很多数据行,我们只需要定义一个类,我们会 ...
- tomcat http协议与ajp协议
AJP13是定向包协议.因为性能原因,使用二进制格式来传输可读性文本.WEB服务器通过 TCP连接和SERVLET容器连接.为了减少进程生成 socket的花费,WEB服务器和SERVLET容器之间尝 ...
- BOOTH 算法的简单理解
学习FPGA时,对于乘法的运算,尤其是对于有符号的乘法运算,也许最熟悉不过的就是 BOOTH算法了. 这里讲解一下BOOTH算法的计算过程,方便大家对BOOTH的理解. 上图是BOOTH ...
- JDK中的序列化和反序列化
题外话:诸事缠身,不知不觉距离上一篇就将近一个月了,读书不易,学习不易,唯有坚持. 写来写去始终不满意,索性贴一个比较好的文章吧! 参考: [Java基础]序列化与反序列化深入分析