SSH

  • SSHClient
    • 用于连接远程服务器并执行基本命令
      • 基于用户名密码连接
      • 基于公钥密钥连接
      • 基于私钥字符串进行连接
  • SFTPClient
    • 用于连接远程服务器并执行上传下载
      • 基于用户名密码上传下载
      • 基于公钥密钥上传下载

SSHClient

模拟SSH

用于连接远程服务器并执行基本命令

基于用户名密码连接

import paramiko# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机,没有就自动添加
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', password='123')# 执行命令  stdout和stderr 二选一 有结果
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result.decode())# 关闭连接
ssh.close()

SSHClient 封装 Transport

import paramikotransport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', password='123')ssh = paramiko.SSHClient()
ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()transport.close()SSHClient 封装 Transport

基于公钥密钥连接

把公钥放在哪台要连的, 自己拿着私钥,公钥给别人

机器A:
生成公钥和私钥的秘钥对
#ssh-keygen
默认保存路径,回车

把公钥拷贝到另一台机子B上

另一台机子B:
#ls ~ 放在哪个家目录下就是哪个用户
#vim .ssh/authorized_keys (看好这里是不是换行了,导致连接不上,要完整一条)
~公钥~~

#cd .ssh/
#chmod 600 authorized_keys
421
rwx rwx rwx
属主 属组 其他用户

另一种复制到机子B的方法
在机子A上
#ssh-copy-id “-p端口号 root@机子B的IP地址”
 
 
用Python来实现
在Xshell连接的 Linux系统上
#sz ~/.ssh/id_rsa  把公钥copy到Windows,然后放到python当前执行文件目录

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('id_rsa')# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.41', port=52113, username='wupeiqi', pkey=private_key)# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')  # +分号可以写第二条,'df;ifconfig' ,然后result就一条。 如果分开写就要两条result
# 获取命令结果
result = stdout.read()# 关闭连接
ssh.close()

SSHClient 封装 Transport

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key)ssh = paramiko.SSHClient()
ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('df')transport.close()SSHClient 封装 Transport

基于私钥字符串进行连接

import paramiko
from io import StringIOkey_str = """-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAq7gLsqYArAFco02/55IgNg0r7NXOtEM3qXpb/dabJ5Uyky/8
NEHhFiQ7deHIRIuTW5Zb0kD6h6EBbVlUMBmwJrC2oSzySLU1w+ZNfH0PE6W6fans
H80whhuc/YgP+fjiO+VR/gFcqib8Rll5UfYzf5H8uuOnDeIXGCVgyHQSmt8if1+e
7hn1MVO1Lrm9Fco8ABI7dyv8/ZEwoSfh2C9rGYgA58LT1FkBRkOePbHD43xNfAYC
tfLvz6LErMnwdOW4sNMEWWAWv1fsTB35PAm5CazfKzmam9n5IQXhmUNcNvmaZtvP
c4f4g59mdsaWNtNaY96UjOfx83Om86gmdkKcnwIDAQABAoIBAQCnDBGFJuv8aA7A
ZkBLe+GN815JtOyye7lIS1n2I7En3oImoUWNaJEYwwJ8+LmjxMwDCtAkR0XwbvY+
c+nsKPEtkjb3sAu6I148RmwWsGncSRqUaJrljOypaW9dS+GO4Ujjz3/lw1lrxSUh
IqVc0E7kyRW8kP3QCaNBwArYteHreZFFp6XmtKMtXaEA3saJYILxaaXlYkoRi4k8
S2/K8aw3ZMR4tDCOfB4o47JaeiA/e185RK3A+mLn9xTDhTdZqTQpv17/YRPcgmwz
zu30fhVXQT/SuI0sO+bzCO4YGoEwoBX718AWhdLJFoFq1B7k2ZEzXTAtjEXQEWm6
01ndU/jhAasdfasdasdfasdfa3eraszxqwefasdfadasdffsFIfAsjQb4HdkmHuC
OeJrJOd+CYvdEeqJJNnF6AbHyYHIECkj0Qq1kEfLOEsqzd5nDbtkKBte6M1trbjl
HtJ2Yb8w6o/q/6Sbj7wf/cW3LIYEdeVCjScozVcQ9R83ea05J+QOAr4nAoGBAMaq
UzLJfLNWZ5Qosmir2oHStFlZpxspax/ln7DlWLW4wPB4YJalSVovF2Buo8hr8X65
lnPiE41M+G0Z7icEXiFyDBFDCtzx0x/RmaBokLathrFtI81UCx4gQPLaSVNMlvQA
539GsubSrO4LpHRNGg/weZ6EqQOXvHvkUkm2bDDJAoGATytFNxen6GtC0ZT3SRQM
WYfasdf3xbtuykmnluiofasd2sfmjnljkt7khghmghdasSDFGQfgaFoKfaawoYeH
C2XasVUsVviBn8kPSLSVBPX4JUfQmA6h8HsajeVahxN1U9e0nYJ0sYDQFUMTS2t8
RT57+WK/0ONwTWHdu+KnaJECgYEAid/ta8LQC3p82iNAZkpWlGDSD2yb/8rH8NQg
9tjEryFwrbMtfX9qn+8srx06B796U3OjifstjJQNmVI0qNlsJpQK8fPwVxRxbJS/
pMbNICrf3sUa4sZgDOFfkeuSlgACh4cVIozDXlR59Z8Y3CoiW0uObEgvMDIfenAj
98pl3ZkCgYEAj/UCSni0dwX4pnKNPm6LUgiS7QvIgM3H9piyt8aipQuzBi5LUKWw
DlQC4Zb73nHgdREtQYYXTu7p27Bl0Gizz1sW2eSgxFU8eTh+ucfVwOXKAXKU5SeI
+MbuBfUYQ4if2N/BXn47+/ecf3A4KgB37Le5SbLDddwCNxGlBzbpBa0=
-----END RSA PRIVATE KEY-----"""private_key = paramiko.RSAKey(file_obj=StringIO(key_str))
transport = paramiko.Transport(('10.0.1.40', 22))
transport.connect(username='wupeiqi', pkey=private_key)ssh = paramiko.SSHClient()
ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('df')
result = stdout.read()transport.close()print(result)基于私钥字符串进行连接

SFTPClient

模拟scp拷贝文件

Xshell连接
1.在Linux下
vim /etc/ssh/sshd_config
PermitRootLogin yes
ssh root@10.0.0.31 -p9999

ssh有一个scp命令,基于sftp协议
在Python中,就是模拟实现scp这个功能
#scp -rp -P9999 1.TXT root@10.0.0.41:/tmp/
-p 把所属的拷贝过去

用于连接远程服务器并执行上传下载

基于用户名密码上传下载

import paramikotransport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='123')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 paramikoprivate_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()
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import paramiko
import uuidclass Haproxy(object):def __init__(self):self.host = '172.16.103.191'self.port = 22self.username = 'wupeiqi'self.pwd = '123'self.__k = Nonedef create_file(self):file_name = str(uuid.uuid4())with open(file_name,'w') as f:f.write('sb')return file_namedef run(self):self.connect()self.upload()self.rename()self.close()def connect(self):transport = paramiko.Transport((self.host,self.port))transport.connect(username=self.username,password=self.pwd)self.__transport = transportdef close(self):self.__transport.close()def upload(self):# 连接,上传file_name = self.create_file()sftp = paramiko.SFTPClient.from_transport(self.__transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put(file_name, '/home/wupeiqi/tttttttttttt.py')def rename(self):ssh = paramiko.SSHClient()ssh._transport = self.__transport# 执行命令stdin, stdout, stderr = ssh.exec_command('mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py')# 获取命令结果result = stdout.read()ha = Haproxy()
ha.run()Demo

Python学习笔记 day9 堡垒机前戏之paramiko模块相关推荐

  1. python学习笔记(二十八)日志模块

    我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志. 介绍一下logging模块,logging模块就是python里面用来操作日志的 ...

  2. 堡垒机前戏:paramiko模块

    一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作. paramiko模块 存在的作用:作批量管理用的. 二.SSHClien ...

  3. 深度之眼 - Python学习笔记——第八章 文件、异常和模块

    第八章 文件.异常和模块 实际应用中,我们绝大多数的数据都是通过文件的交互完成的 8.1 文件的读写 8.1.1 文件的打开 文件的打开通用格式 with open("文件路径", ...

  4. Python学习笔记(5):os.path模块

    简介 os.path模块提供了一系列与文件路径和文件名有关的函数.接下来和大家分享一些比较常用的函数. abspath os.path.abspath(path)函数返回指定路径的绝对标准路径. 例如 ...

  5. 前阿里大佬干货分享,0基础小白,转行必看Python学习笔记(七)

    Python学习笔记7 异常处理 包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处理 系统内部一开始已经内置了一些特定的错误场景,当我们触发了 ...

  6. Python学习之道-烤机测试日志Log分析统计

    Python学习之道-烤机测试日志Log分析统计 问题引出 一.环境准备 二.实践代码 1.初步实现 2.更新CSV文件写入统计结果 3.运行脚本 4.实现遍历多个Log并汇总结果到Excel 三.遇 ...

  7. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  8. Python学习笔记(1)---B站黑马程序员

    Python学习笔记(1)-B站黑马程序员 Python学习笔记(2)-B站黑马程序员 Python学习笔记(3)-B站黑马程序员 文章目录 Linux基础 Python基础 一.Python介绍 0 ...

  9. Python 学习笔记——入门

    文章目录 〇.Python 是什么 一.推荐的教程 二.这篇学习笔记适合什么人 三.环境 1. 操作系统 对于 Windows 对于 Ubuntu 对于其他操作系统 2. Python 对于 Wind ...

最新文章

  1. TensorRT Samples: MNIST API
  2. js 字符串操作函数
  3. 战队基地_走a怪凌晨四点被赶出训练基地,粉丝礼物还被战队瓜分
  4. 三星二级菜单_你变我也变,神奇的excel二级联动下拉菜单
  5. 合并BN层到卷积层的原理及实验
  6. [转]微信小程序安全浅析
  7. Windows和linux提权方法,Windows与Linux本地用户提权体验(一)
  8. 【JAVA 第三章 流程控制语句】课后习题 月历打印
  9. docker 获取镜像
  10. VB 二进制数据读写实例
  11. DataFrame和RDD互操作的两种方式:
  12. 红米pro android o刷机,红米Pro如何刷机?你可以通过这两种方法获取root权限!
  13. 无法修改计算机睡眠,win7不能睡眠怎么办,通过两个步骤的设置轻松解决
  14. 一位Google程序员的算法学习之路
  15. 用v-modle做一个简单的计算器
  16. MCS—51汇编语言程序
  17. [Unity]Optimize Your Mobile Game Performance中文版
  18. 贵阳骑龙村:一根小香葱闯出大市场
  19. VUE搭建云音乐播放器(App版本)
  20. android 仿美团、大众点评滑动viewpager菜单栏

热门文章

  1. JavaWeb图书管理系统
  2. APEX包管理器简述(二)
  3. C语言 文件合成器代码(用图片掩盖.rar文件)
  4. git版本回退的几种方式
  5. CSS transform属性
  6. Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示
  7. chrome突然打不开网页,其他浏览器可以,解决办法
  8. 可塑造攻击_指导如何帮助塑造我的职业
  9. iOS开发技术-实验一-简易计算器实现
  10. cad相对坐标快捷键_Auto CAD中常用的快捷键(1)