Python针对SSH技术的封装

python pexpect 使用详解--针对远程登录机器,在机器上做各种操作,返回交互信息等等 Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块,因此在模拟人对程序的控制上表现很好,由于项目需要,看了一些关于pexpect的api文档和部分源码,这里对立面一些关键函数使用部分进行解释说明,部分内部源码会进行截取以供分析,自己的例子也会给出,主要是针对ssh远程登录,然后执行一些hive任务,将执行期间的各种状态信息获取。这里给出个例子,可以根据业务需要封装成更通 阅读详情

SSH技术的理论知识就不做介绍了,在这里主要就是介绍Python针对SSH技术封装的两个模块:paramiko和sshtunnel。

paramiko可以实现执行远程命令,上传文件到远程,从远程下载文件。sshtunnel可以实现端口的绑定。

 

paramiko

基于用户名和密码连接

 

import paramiko
paramiko.util.log_to_file('paramiko.log') # 创建SSH连接日志文件(只保留前一次连接的详细日志,以前的日志会自动被覆盖)

ssh = paramiko.SSHClient()
# 读取known_hosts
ssh.load_system_host_keys()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.80.130', port=22, username='wv', password='meiyoumima')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令执行结果
print stdout.read()
# 关闭连接
ssh.close()

 

 

 

 

 

基于密钥连接

 

import paramiko
paramiko.util.log_to_file('paramiko.log') # 创建SSH连接日志文件(只保留前一次连接的详细日志,以前的日志会自动被覆盖)

private_key = paramiko.RSAKey._from_private_key_file('RSAKey.cfg')
   
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='192.168.80.130', port=22, username='wv', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
print stdout.read()
# 关闭连接
ssh.close()

 

 

 

 

 

基于用户名和密码进行传送文件

 

import paramiko
paramiko.util.log_to_file('paramiko.log')

transport = paramiko.Transport(('192.168.80.130',22))

transport.connect(username='wv',password='meiyoumima')
   
sftp = paramiko.SFTPClient.from_transport(transport)
 
# paramiko.log 上传至服务器/home/wv/paramiko.log
sftp.put('paramiko.log', '/home/wv/paramiko.log')
 
# 将remove_path 下载到本地 local_path
sftp.get('/home/wv/dump.rdb', 'dump.rdb')
   
transport.close()

 

 

 

 

 

sshtunnel

使用sshtunnel进行跳转登录MySQL
方式1

 

from sshtunnel import SSHTunnelForwarder
import MySQLdb 

server =  SSHTunnelForwarder(
    ssh_address_or_host=('st',22), # 指定ssh登录的跳转机的address
    ssh_username='wangwei01', # 跳转机的用户
    ssh_password='xxx', # 跳转机的密码
    local_bind_address=('127.0.0.1',10000),# 本地绑定的端口
    remote_bind_address=('10.10.11.102',3306)) # 远程绑定的端口

server.start()
# 启动以后,操作本地的10000端口相当于操作10.10.11.102的3306端口

conn = MySQLdb.connect(host='127.0.0.1',# 此处必须是是127.0.0.1  
                   port=10000,# 本地绑定的端口
                   user='smzdm_post',
                   passwd='smzdmPost_162304',  
                   db='smzdm_yuanchuang')
cursor = conn.cursor()
cursor.execute("show tables")
print(server.local_bind_address)
print(len(cursor.fetchall()))
server.stop()

 


方式2

 

 

 

 

 

from sshtunnel import SSHTunnelForwarder
import MySQLdb 

with SSHTunnelForwarder(
    ssh_address_or_host=('106.75.61.77',22),
    ssh_username='wangwei01',
    ssh_password='xxx',
    remote_bind_address=('10.10.11.102',3306)) as server:
    
    conn = MySQLdb.connect(host='127.0.0.1',       #此处必须是是127.0.0.1  
                       port=server.local_bind_port,
                       user='smzdm_post',
                       passwd='smzdmPost_162304',  
                       db='smzdm_yuanchuang')
    cursor = conn.cursor()
    cursor.execute("show tables")
    print(server.local_bind_address)
    print(len(cursor.fetchall()))

 

 

 

 

 

 

ref:

http://www.cnblogs.com/xia520pi/p/3805043.html Python Paramiko模块安装和使用

http://blog.youkuaiyun.com/apache0554/article/details/43764199python的paramiko模块使用

http://blog.youkuaiyun.com/kwsy2008/article/details/51440952 python 使用mysqldb模块通过ssh隧道连接mysql

http://www.cnblogs.com/xiaozhiqi/p/5814564.html paramiko模块

http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html SSH原理与运用(二):远程操作与端口转发

python3-基于socket实现ssh,简单命令执行 服务端 import socket import subprocess import struct IP = '127.0.0.1' PORT = 8080 ADD = (IP, PORT) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(ADD) server.listen(5) while T... 阅读详情

相关推荐

Ubuntu 20.04 上安全运行 Jupyter Notebook 的 SSH 隧道实战指南

Jupyter Notebook 是 Python 数据科学与机器学习的核心交互式开发环境,其本地化运行机制与服务器部署需求存在天然张力。在 Ubuntu 20.04 这一长期支持(LTS)系统上,直接暴露 Web 服务存在严重安全风险,而 SSH 隧道凭借端口转发、加密传输与零额外依赖等特性,成为最轻量、最可靠的安全接入方案。它基于 TCP 层透明代理,不修改 Jupyter 配置逻辑,却能将远程 8888 端口安全映射至本地 127.0.0.1,完美适配 Python 3 生态与 systemd 管理体

weixin_30243533的博客 376

Python实现Paramiko的二次封装

Paramiko是一个用于执行SSH命令的Python第三方库,使用该库可实现自动化运维的所有任务,如下是一些常用代码的封装方式,多数代码为半成品,只是敲代码时的备份副本防止丢失,仅供参考,目前本人巡检百台设备完全无压力。

微软技术分享 8493

VS Code Remote-SSH:无缝远程开发环境搭建指南

远程开发本质上是将开发环境从本地机器解耦,依托安全协议实现跨设备一致的编码体验。其核心原理在于客户端-服务端协同架构:本地运行UI与编辑逻辑,远程宿主运行语言服务、调试器与文件系统代理。技术价值体现在消除环境差异、降低上下文切换损耗、复用物理硬件能力(如GPU、串口、内核模块)。典型应用场景包括AI模型训练、嵌入式C++调试、微服务多环境协同及高校实验室资源共享。本文围绕Visual Studio Code Remote-SSH插件,详解SSH密钥认证加固、vscode-server定制部署与Python/

weixin_30263073的博客 340

SSH协议(1)-工作原理及过程

SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。SSH使用最多的是远程登录和传输文件,实现此功能的传统协议都不安全(ftp,telnet等),因为它们使用明文传输数据。而SSH在传输过程中的数据是加密的,安全性更高。 工作原理 SSH协议是基于非对称加密方法的,服务器和客户端都会生成自己的公钥和私钥。 (1) 服务器建立公钥。若

littlecjx 2万+

用pyngrok一键打通Kaggle SSH隧道:Python脚本自动配置教程(附CUDA环境修复)

本文详细介绍了如何使用pyngrok一键打通Kaggle SSH隧道,实现VSCode直连Kaggle内核的自动化配置。通过Python脚本自动设置SSH服务、修复CUDA环境变量冲突,并利用ngrok实现内网穿透,大幅提升开发效率。特别针对CUDA与OpenSSL的版本冲突问题提供了智能修复方案,适合数据科学开发者快速搭建远程开发环境。

weixin_29201933的博客 389

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2199

数通-ssh的安全封装方法

数通-ssh的安全封装方法 SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台...

weixin_45695945的博客 547

汽车以太网- IEEE 802.3标准

关于汽车以太网,大家看到最多的标准大概就是IEEE802.3bw,也就是我们车内使用的百兆以太网,专业称呼是100BASE-T1,该标准是车内百兆以太网的物理层协议,是我们学习汽车以太网必须要了解的协议。在正式了解协议之前,我们先介绍下什么是IEEE802.3标准。............

weixin_39974126的博客 7106

封装常用的SSH功能(远程上传、下载、执行命令)

封装常用的SSH功能(远程上传、下载、执行命令) import paramiko coding:utf-8 class SSHUtil(object): ''' 封装常用的SSH功能,包括: * 远程登录 * 远程执行命令 * 上传文件 * 下载文件 ''' def __init__(self, ip, username, pass...

weixin_40342792的博客 969

HFSS入门学习笔记——微带一分四功分器的设计与仿真

功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。

weixin_42126696的博客 2万+

VI恒流源原理详细分析(0~10V转0/4~20mA)

但是此电阻也不能无限增加,首先我们所列方程均是基于运放虚短虚断的假设,此假设又是基于运放输入阻抗无穷大,输出阻抗无穷小的前提条件,然而实际的运放并非理想运放,对于TL082IDR这款运放,其Rid(Common-mode input resistance)典型值为1TΩ,以此来看感觉1MΩ确实还不是很大,但是还有另一个影响因素需要考虑,那就是电路的抗干扰能力,原则上,电阻越大受到外部干扰的可能性越大。也就是实现Uin 0~10V变化时对应Iout 0~20mA的一个线性对应关系。

IOTBOT的博客 2897

python ssh模块_python pexpect模块封装ssh

很多时候需要批量在一批主机上执行某个操作时,利用python 可以很好的完成这个工作。如果在现网主机上没有部署自动化工具时,同时你又不想使用paramiko这样相对重量级的模块,你可以通过pexpect模块通过一个简单的spawn执行并交互完成一些简单的命令操作。pexpect模块的安装# wget https://pypi.python.org/packages/source/p/pexpect...

weixin_39920629的博客 251

Fluent实战——残差震荡分析与收敛优化策略

本文深入探讨了Fluent仿真中残差震荡的成因与优化策略。残差震荡是流场物理或数值问题的关键信号,文章系统分析了网格质量、边界条件、物理模型非定常性及求解设置四大主因,并提供了库朗数与松弛因子的调参心法,以及针对超音速流、共轭传热等典型场景的实战优化方案,旨在帮助用户有效提升计算收敛性与结果可靠性。

w1x2y3的博客 313

一键利用Erlang SSH高危漏洞获取反向Shell

这是一个针对CVE-2025-32433漏洞的Python自动化利用脚本。该漏洞存在于Erlang/OTP的SSH服务器库中,影响OTP-27.3.3和之前的版本。攻击者可以利用此漏洞在无需有效凭证的情况下执行任意命令,获得未经授权的系统访问权限。本项目提供了一个完整的利用工具,通过发送特制的预认证SSH通道请求,触发Erlang RCE载荷并建立反向Shell连接。

分享技术点滴 315

C#客户端对接工厂MES的方法

本文介绍了使用C#实现WebApi客户端与工厂MES系统交互的方法。主要包括四个步骤:1)配置工控机IP地址;2)获取服务器URL;3)创建HttpHelper帮助类实现单例模式HttpClient,提供异步POST请求方法;4)通过实例化帮助类实现设备状态数据的JSON格式发送与接收。该方案采用异步通信方式,支持超时处理,能够满足大多数MES系统交互需求,帮助工程师快速完成设备与MES系统的数据对接。文中给出了核心代码片段和完整的数据交互流程示例。

weixin_39832501的博客 264

【YOLOv8改进-卷积Conv】 SAConv(Switchable Atrous Convolution):可切换的空洞卷积

许多现代目标检测器通过采用二次观察和思考机制展示了卓越的性能。在本文中,我们在目标检测的主干设计中探索了这一机制。在宏观层面上,我们提出了递归特征金字塔(Recursive Feature Pyramid),该金字塔将特征金字塔网络(Feature Pyramid Networks)的额外反馈连接融入到底层的自下而上主干层中。在微观层面上,我们提出了可切换空洞卷积(Switchable Atrous Convolution),该卷积通过不同的空洞率卷积特征,并使用切换函数汇集结果。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1528

python - paramiko的再次封装(批量操作上传和下载)

需求: 实现批量操作cmd\上传put\下载get 1.先封装一个类SshRemoteHost, 2.类方法run、do_cmd、do_put、do_get 3.新建conf目录,里面新建三个文件ftp.conf web.conf mysql.conf import os import sys import paramiko from paramiko.ssh_exception import ...

淋巴cell学习py之路 860

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

python ssh实时交互_[NetDevOps] 使用SSH进行网络自动化的例子及问题(1)

先上结论如果不是设备太老,不支持任何现代API接口,我不推荐任何人尝试使用SSH来自动化管理网络设备。NETCONF和XML再丑,RESTCONF再不好用,那也仍然是API,只要这个API能毫秒级响应你的请求并给你返回数据,那它总是比SSH好用的。所以,在做任何自动化尝试之前,第一件事就是找找看你要操作的设备是否有API可供使用,如果没有,再去考虑用SSH。使用SSH做网络自动化的本质,是对人类行...

weixin_39957318的博客 834

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python如何对一个属性或方法进行封装_面向对象编程,如何进行对象的封装?PYTHON代码解析...

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT)、PYTHON、PHP、C#、安卓等多项技术。封装面向对象三大特性:继承 封装 多态隐藏对象的属性和实现细节,仅对外提供公共访问方法广义上的封装: 把方法和变量都封装在类中狭义上的封装: 在类的外部干脆不能调用了优点将变化隔离便于使用提高复用性提高安全性封装原则:将不需要对外提供的内容隐藏起来把属性都...

weixin_39895283的博客 85

Python SSH,telnet教程及代码,Python如何执行TCL,控制spirentTestCenter,以及基本的数据EDA

需求分析 公司要求做自动化测试,在交换芯片流片前测试芯片的功能,在palladium上跑综合网表,仿真实现芯片的功能,具体如何实现的就不细说了,不是重点TAT。我目前的工作就是负责能够用脚本SSH远程服务器,执行Linux下执行一些之前写好的测试程序(芯片的配置代码),同时在配置好芯片后,使用脚本控制测试仪,使得测试仪构造报文,发流停流等功能。 由于我们租用的思博伦测试仪版本太老,只支持TCL脚本...

super_chiry的博客 1844

python网络编程(二)模拟ssh远程执行命令

要实现一个像ssh远程连接工具一样,在终端输入命令,返回对应的结果。比如window的dos命令:dir :查看目录下的文件ipconfig : 查看网卡信息tasklist : 查看进程列表linux的命令:ls : 查看目录下的文件ifconfig : 查看网卡信息ps -aux : 查看进程列表。

javascript_good的博客 2694

python高效办公 知乎_骚操作|高效办公,Python自动化教你一键获取日志!

来源:AirPython作者:星安果 1. 前言对大部分的人来说,解决 Bug 都是依靠关键字去日志去定位问题!在调试情况下,我们可以实时在控制台查看日志;但对于部署到服务器上的应用,日志都存放在服务器某个目录下,没法通过本地查看到这种情况下,就需要我们先登录服务器,然后进入到日志目录文件夹,最后通过日志文件去定位问题;如果涉及到 K8s 容器,可能还需要使用 kubectl 命令进入到服务对应...

weixin_39992072的博客 170

CMDB-(paramiko模块 -- 实现ssh连接)

import paramiko # 实现ssh功能的模块ssh = paramiko.SSHClient() # 实例化对象ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机ssh.connect(hostname='192.168.6.202',port=22,username='...

weixin_30848775的博客 234

[蟒蛇菜谱] Python封装shell命令

# -*- coding: utf-8 -*- import os import subprocess import signal import pwd import sys class MockLogger(object): '''模拟日志类。方便单元测试。''' def __init__(self): self.info = self....

weixin_30416497的博客 132

10分钟搭建SSH诊断工具原型

最小可行原则:第一个版本只实现核心错误检测(约150行代码),后续再逐步迭代错误处理陷阱:要注意区分网络层错误和应用层错误,比如ConnectionRefused和AuthenticationError的处理逻辑完全不同性能取舍:为快速响应添加了2秒超时机制,虽然可能漏判但保证了用户体验扩展性设计:用策略模式封装检测规则,新增错误类型只需添加一个函数这个工具从构思到可运行版本只用了不到十分钟,虽然功能简单,但已经能解决80%的日常SSH连接问题。后续计划加入重试机制、多主机并行检测等功能。

NightshadeRaven21的博客 490
上一篇: SSH Tunnel 一般场景用法
下一篇: 使用命令读取kafka的内部topic:__consumer_offsets
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值