堡垒机前戏
开发堡垒机之前,先来学习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. Ubuntu12.04下tomcat的安装与配置

    1.下载tomcat 我的tomcat是从 http://tomcat.apache.org/download-70.cgi 这里下载的tar.gz版本的. 2.解压tomcat $sudo tar ...

  2. 【Java】Callable,Runnable比较及用法

    1.Runnable和Callable的区别 (1) Callable规定的方法是 call(), Runnable规定的方法是 run(). (2) Callable的任务执行后可返回值,而 Run ...

  3. AMQP学习 & RabbitMQ 与 ActiveMQ、ZeroMQ以及Kafka的比较

    之前写了一篇文章关于Active以及消息队列推拉模式的文章,可以参考:link 关于 Active 与 RabbitMQ以及其他的比较,有如下记录: 这篇文章 link 提到: 基本介绍RabbitM ...

  4. wp中的位图

    // // 摘要: // 使用提供的元素和变换初始化 System.Windows.Media.Imaging.WriteableBitmap 类的新实例. // // 参数: // element: ...

  5. spark sql 入门

    package cn.my.sparksql import cn.my.sparkStream.LogLevel import org.apache.spark.{SparkConf, SparkCo ...

  6. 【Unity笔记】一些Mecanim动画系统、状态机的参数细节

    动画混合树Blend Tree调整动画片段的播放速度: 0 动画不播放 -1 动画倒着播放:如果只有“往前走”的动画,可以变成“往后走”动画 勾选动画是否镜像: 左右颠倒(挥左手变成挥右手) 过度条件 ...

  7. JAVA用POI读取和创建2003和2007版本Excel完美示例

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  8. spring4.1.6配置quartz2.2.1(maven) <转>

    Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...

  9. Energy Modes能量管理模式

    1  EM0 运行模式 默认模式; 2  EM1 休眠模式 休眠模式 主处理器停止,片上系统模块运行; 3  EM2 深度休眠 只有异步或低频外设运行; 4  EM3 停止模式 与EM2相比,低频晶振 ...

  10. 早前的java笔记

    多个if语句时即使前一个if为真,后面的if也要继续判断, 如果用else if 则只有前者为假的时候它的if 才接着判断. if else 语句 if a>=5 shuchu b=10 els ...