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.迭代器&生成器 ...
随机推荐
- dp之分组背包hdu1712
题意:有n门课程,和m天时间,完成a[i][j]得到的价值为第i行j列的数字,求最大价值...... 思路:分组背包,就是第n门课程,可以做一天,可以做两天,但它们相斥,你做了一天,就不能再做一天.. ...
- Redis简述
Redis 简单介绍 Redis 是全然开源免费的.遵守BSD协议,是一个高性能的key-value数据库. Redis 与其它 key - value 缓存产品有下面三个特点: Redis支持数据的 ...
- 【Unity】状态机的状态改变及其回调
问:怎么知道状态机发生了改变?即如何得知从一个状态切换到了另一个状态? 答:Unity使用StateMachineBehaviours类来描述状态机的行为,当状态机处于不同的状态时,会触发不同的回调. ...
- Spring 事物传播特性
Spring 事物传播特性 这是Spring官方的定义 一共有7种 摘自源码省略了一部分 public interface TransactionDefinition { int PROPAGATIO ...
- iOS边练边学--通知机制和键盘处理
一.通知中心(NSNotificationCenter) 每一个程序都有一个通知中心实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以想通知中心发布通知(NSNotification),描述 ...
- Hibernate- 开发环境准备
数据库:两张表,两者通过publisher_id构成关联关系. Book(图书表) CREATE TABLE `t_book` ( `id` int(11) NOT NULL AUTO_INCREME ...
- 在Ubuntu中安装PHP,MySQL,Nginx和phpMyAdmin
apt install php apt-get install php7.0 apt-get -y install php7.0-fpm 缺少 mysqli 扩展.请检查 PHP 配置. apt in ...
- Windows下进程通信方式
当线程分属于不同进程,也就是分驻在不同的地址空间时,它们之间的通讯需要跨越地址空间的边界,便得采取一些与同一进程中不同线程间通讯不同的方法.在Windows程序中,各个进程之间常常需要交换数据,进行数 ...
- ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
- 【R】用 ggplot2 绘制漂亮的分级统计地图
最近我一直尝试利用R绘制地图,我从网上找到了上百种不同的实现方法,然而其中却没有适用于我的数据的方法.最终,我从以下几个博客[1]中找到了灵感.我在整合这些资源的基础上,通过不断的试验和修正得到了一个 ...