当前位置: 首页 > news >正文

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数:

# _*_ Coding : UTF-8 _*_
# @Time :  13:14
# @Author : YYZ
# @File : Flask
# @Project : Python_Project_爬虫
import jsonfrom flask import Flask,request,jsonify
import sshapi = Flask(__name__)# methods: 指定请求方式'''
接口解析参数host = host_info["host"]port = host_info["port"]service = host_info["service"]user = host_info["user"]pwd = host_info["pwd"]
'''
@api.route('/',methods=['POST'])
def install():# 请求方式为post时,可以使用 request.get_json()接收到JSON数据try:#host_info = request.get_json()  # 获取 POST 请求中的 JSON 数据host_info = request.get_data()# 如果得到的data是字符串格式,则需要用json.loads来变换成python格式,看个人需求host_info = json.loads(host_info)print(host_info)except Exception as e:return jsonify({'error': '请求数据失败'}), 400# 处理数据# 调用do_something_with_data函数来处理接收到的数据。try:connect = ssh.Sshclass(host_info["host"], host_info["user"], host_info["port"])  # 端口,用户,ssh端口connect.conn_by_pwd(host_info["pwd"])  # 输入密码,进行登录except Exception as e:return jsonify({'error': '连接失败'}), 888if  host_info["cmd"] :try:command_res = str(connect.exec_commond(host_info["cmd"]))    #执行命令print(command_res)except Exception as e:return jsonify({'error': '执行失败'}), 888if host_info["file-determine"] == "yes":try:file_res = connect.upload_file(host_info["local_path"],host_info["remote_path"],host_info["file_name"])print(host_info["file_name"]+str(file_res))except Exception as e:return jsonify({'error': '上传失败'}), 888return  "操作完成"if __name__ == '__main__':api.run(host='0.0.0.0', port=8080, debug=True)

Ssh连接部分:

import paramiko
import json
'''
ssh 连接对象
本对象提供密钥连接、命令执行、关闭连接
'''class Sshclass(object):# ip = ''# port = 22# username = ''# timeout = 0# ssh = Nonedef __init__(self,ip,username,port=22,timeout=30):'''初始化ssh对象:param ip: 主机IP:param username: 登录用户名:param port: ssh端口号:param timeout: 连接超时:return:'''self.ip = ipself.username = usernameself.timeout = timeoutself.port = port'''SSHClient作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。Paramiko中的几个基础名词:1、Channel:是一种类Socket,一种安全的SSH传输通道;2、Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel;3、Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话。'''ssh = paramiko.SSHClient()#远程主机没有本地主机密钥或HostKeys对象时的连接方法,需要配置ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())self.ssh = sshdef conn_by_key(self,key):'''密钥连接:param key:  str rsa密钥路径:return:  ssh连接对象'''rsa_key = paramiko.RSAKey.from_private_key(key)self.ssh.connect(hostname=self.ip,port=self.port,username=self.username,pkey=rsa_key,timeout=self.timeout)if self.ssh:print('密钥连接成功')else:self.close()raise Exception('密钥连接失败')def conn_by_pwd(self,pwd):'''密码连接:param pwd: 登录密码:return:  ssh连接对象'''self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())self.ssh.connect(hostname=self.ip,port=self.port,username=self.username,password=pwd)if self.ssh:print('密码连接成功')else:self.close()raise Exception('密码连接失败')def exec_commond(self,command):'''命令控制:param commond: 命令:return: 返回结构'''if command:stdin, stdout, stderr = self.ssh.exec_command(command)return {"stdin":command,"stdout":stdout.read(),"stderr":stderr.read()}else:self.close()raise Exception("命令不能为空")def close(self):'''关闭当前连接:return:'''if self.ssh:self.ssh.close()else:raise Exception("ssh关闭连接失败,当前对象没有ssh连接。")def upload_file(self,local_path,remote_path,file_name):# sftp_link = paramiko.Transport(self.ip,self.port)# sftp_link.connect(username=self.username,password=pwd)# sftp = paramiko.SFTPClient.from_transport(sftp_link)sftp = self.ssh.open_sftp()try:sftp.put(local_path+"\\"+file_name, remote_path+"/"+file_name)#print("上传成功")return ("上传成功"), 200except Exception as e:return {'error': '上传失败'}, 888finally:sftp.close()self.close()if __name__ == '__main__':ssh = Sshclass('192.168.115.23','root', port=22)pwd = "123456"local_path = 'D:\PyChrom\Python_Flask\自动化接口--Flask'remote_path = "/opt"file_name = 'file.py'ssh.conn_by_pwd(pwd)#res = str(ssh.exec_commond("ls /"))#print(res)res = ssh.upload_file(local_path,remote_path,file_name)print(res)

接口调试

后续优化思路:

目前只是远程连接+文件上传,后续会继续优化

弄个公共的nfs,平常一些脚本和包会放到这个nfs里,脚本或包自动从nfs里拉,然后执行脚本,即可部署,包括多机部署。

相关文章:

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数: # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…...

kafka客户端应用参数详解

一、基本客户端收发消息 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.13</artifactId><version>3.4.0</version></depend…...

Apache Doris 行列转换可以这样玩

行列转换在做报表分析时还是经常会遇到的&#xff0c;今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 1. 行转列 我们来看一个简单的例子&#xff0c;我们要把下面这个表的数据&#xff0c;转换成图二的样式 image-20230914151818953.png …...

【Qt图形视图框架】自定义QGraphicsItem和QGraphicsView,实现鼠标(移动、缩放)及键盘事件、右键事件

自定义QGraphicsItem和QGraphicsView 说明示例myitem.hmyitem.cppmyview.hmyview.cpp调用main.cpp 效果 说明 在使用Qt的图形视图框架实现功能时&#xff0c;一般会在其基础上进行自定义功能实现。 如&#xff1a;滚轮对场景的缩放&#xff0c;鼠标拖动场景中的项&#xff0c;…...

C语言结构体指针学习

结构体变量存放内存中&#xff0c;也有起始地址&#xff0c;定义一个变量来存放这个地址&#xff0c;那这个变量就是结构体指针&#xff1b; typedef struct mydata{int a1;int a2;int a3; }mydata;void CJgtzzView::OnDraw(CDC* pDC) {CJgtzzDoc* pDoc GetDocument();ASSERT…...

华为云云耀云服务器L实例评测|部署在线轻量级备忘录 memos

华为云云耀云服务器L实例评测&#xff5c;部署在线轻量级备忘录 memos 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品优势1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 memos3.1 memos介绍3.2 Docker 环境搭建…...

详解Avast Driver Updater:电脑驱动更新工具的利器还是多余的软件?

亲爱的读者朋友们&#xff0c;你是不是经常为电脑的驱动问题而烦恼&#xff1f;如果是的话&#xff0c;你可能会对这款软件——Avast Driver Updater 电脑驱动更新工具感兴趣。但在你决定尝试之前&#xff0c;不妨先和我一起深入探讨一下它的优点、缺点以及它适用的使用场景。 …...

大数据Flink(九十五):DML:Window TopN

文章目录 DML:Window TopN DML:Window TopN Window TopN 定义(支持 Streaming):Window TopN 是一种特殊的 TopN,它的返回结果是每一个窗口内的 N 个最小值或者最大值。 应用场景...

使用OKHttpClient访问网络

使用OKHttpClient前要引入依赖&#xff1a; 在build.gradle(Moduel :app)中添加 implementation com.squareup.okhttp3:okhttp:3.14.1 implementation com.squareup.okhttp3:logging-interceptor:3.14.1 implementation com.squareup.okio:okio:1.6.0 1. GET&#xff08;同步…...

maui 开发AMD CPU踩的坑。

刚换的 amd R7735HS 笔记本&#xff0c;8核16线程&#xff0c;32GB内存。性能得实强悍 。 当需要发布iOS版本时发现&#xff0c;我没有macos &#xff0c;那就安装个vmware 吧。看了一下Apple 要求以后的发布的APP需要以xcode14.3或以后版本开发的版本&#xff0c;但xcode14.3…...

宝塔反代openai官方API接口详细教程,502 Bad Gateway问题解决

一、前言 宝塔反代openai官方API接口详细教程&#xff0c;实现国内使用ChatGPT502 Bad Gateway问题解决&#xff0c; 此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 二、实现前提 一台海外VPS服务…...

【leetocde】128. 最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 …...

【Vue3】动态 class 类

如果你想在 Vue.js 中动态设置元素的 class 类名&#xff0c;你可以使用以下两种主要方式&#xff1a; 绑定一个动态的 class 对象&#xff1a;你可以使用 v-bind 或简写的 : 来绑定一个包含类名的对象&#xff0c;其中类名的键是类名字符串&#xff0c;值是一个布尔值或计算属…...

【Redis】redis基本数据类型详解(String、List、Hash、Set、ZSet)

目录 RedisString(字符串)List(列表)Hash(字典)Set(集合)ZSet(有序集合) Redis Redis有5种基本的数据结构&#xff0c;分别为&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、set&#xff08;集合&#xff09;、hash&#xff08;哈希&a…...

ubuntu源码安装aria2

github:GitHub - aria2/aria2: aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in command-line. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink. 发行说明&#xff1a;GitHub - aria2/aria2 at releas…...

【多任务案例:猫狗脸部定位与分类】

【猫狗脸部定位与识别】 1 引言2 损失函数3 The Oxford-IIIT Pet Dataset数据集4 数据预处理4 创建模型输入5 自定义数据集加载方式6 显示一批次数据7 创建定位模型8 模型训练9 绘制损失曲线10 模型保存与预测 1 引言 猫狗脸部定位与识别分为定位和识别&#xff0c;即定位猫狗…...

.Net 锁的介绍

在.NET中,有多种锁机制可用于多线程编程,用来确保线程安全和共享资源的同步。以下是.NET中常见的锁机制: 1. **Monitor(互斥锁):** `Monitor` 是.NET中最基本的锁机制之一。它使用 `lock` 关键字实现,可以确保在同一时刻只有一个线程能够访问被锁定的代码块。`Monitor`…...

Office 2021 小型企业版商用办公软件评测:提升工作效率与协作能力的专业利器

作为一名软件评测人员&#xff0c;我将为您带来一篇关于 Office 2021 小型企业版商用办公软件的评测文章。在这篇评测中&#xff0c;我将从实用性、使用场景、优点和缺点等多个方面对该软件进行客观分析&#xff0c;在专业角度为您揭示它的真正实力和潜力。 一、实用性&#xf…...

Monkey测试

一&#xff1a;测试环境搭建 1&#xff1a;下载android-sdk_r24.4.1-windows 2&#xff1a;下载Java 3&#xff1a;配置环境变量&#xff1a;关于怎么配置环境变量&#xff08;百度一下&#xff1a;monkey环境搭建&#xff0c;&#xff09; 二&#xff1a;monkey测试&#xff1…...

wzx-jmw:NFL合理,但可能被颠覆。2023-2024

As well known by all, NFL is ... 没有免费的午餐理论 No Free Lunch Theorem_免费午餐理论-CSDN博客 However, if we......

华为GaussDB开发者认证实验通关实录:从Java连接到SQL增删改查,手把手带你搞定7个核心任务

华为GaussDB开发者认证实战指南&#xff1a;7大核心任务深度解析 第一次接触华为GaussDB开发者认证的实验环节时&#xff0c;那种既兴奋又忐忑的心情至今记忆犹新。作为一款企业级分布式数据库&#xff0c;GaussDB在金融、电信等行业有着广泛应用&#xff0c;而认证考试正是检验…...

手把手教你用Matlab实现Demosaic算法:从RAW图像到RGB的完整转换流程

从RAW到RGB&#xff1a;Matlab实战Demosaic算法全解析 当你第一次看到相机拍摄的RAW文件时&#xff0c;可能会困惑于那些看似杂乱无章的像素排列。这正是Demosaic算法大显身手的时刻——它能将这些单色数据转化为我们熟悉的彩色图像。作为图像信号处理(ISP)流水线中的关键环节&…...

(支援发出,转发需官方授权)某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招(找)的学生都一样。

&#xff08;支援发出&#xff0c;转发需官方授权&#xff09;某个名师大家可能还是一个女的自称“廉者不受嗟来之食”对自己对自己的学生和想要招&#xff08;找&#xff09;的学生都一样。...

AI智能体架构:更复杂不一定更好

为什么更智能的智能体架构并不总能提升效果 我对智能体将给知识工作带来的影响依然持乐观态度。正如我在之前的文章中所指出的&#xff0c;那些由明确规则和成熟系统塑造的领域&#xff08;包括会计和合同管理&#xff09;已经看起来非常适合这种自动化。但即使机遇真实存在&am…...

AI绘画工作流:OpenClaw协调Qwen3-32B与Stable Diffusion生成海报

AI绘画工作流&#xff1a;OpenClaw协调Qwen3-32B与Stable Diffusion生成海报 1. 为什么需要自动化AI绘画工作流 去年我为一个本地咖啡馆设计活动海报时&#xff0c;经历了典型的"人工串联AI工具"的痛苦&#xff1a;先在ChatGPT里反复修改文案&#xff0c;再把文案粘…...

3步搞定B站视频下载:哔哩下载姬Downkyi完整使用教程

3步搞定B站视频下载&#xff1a;哔哩下载姬Downkyi完整使用教程 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xf…...

LRCGet:三步构建完美离线音乐歌词库的终极指南

LRCGet&#xff1a;三步构建完美离线音乐歌词库的终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否曾面对庞大的本地音乐收藏&#xff0c…...

Vue工业互联网平台:多租户跨平台支持,涵盖工业4.0主流业务需求,助力企业数字化转型

工业互联网CPS系统是一套前端基于Vue2.6&#xff0c;后端基于.NetCore3.1&#xff0c;前后端分离&#xff0c;支持跨平台、支持多租户、多语言、多数据库的平台型应用软件。 它涵盖了工业4.0领域主流的业务需求&#xff0c;如MES、WMS、SRM、EMS、QMS、Scada等。 本人深耕工业4…...

千问3.5-27B模型缓存优化:加速OpenClaw任务响应

千问3.5-27B模型缓存优化&#xff1a;加速OpenClaw任务响应 1. 为什么需要缓存优化&#xff1f; 当我第一次将千问3.5-27B模型接入OpenClaw时&#xff0c;发现一个令人头疼的问题&#xff1a;重复性任务的响应时间波动很大。比如让OpenClaw帮我整理每日会议纪要&#xff0c;同…...

Web开发全栈实践:构建一个图像描述生成与分享社区网站

Web开发全栈实践&#xff1a;构建一个图像描述生成与分享社区网站 你有没有想过&#xff0c;如果上传一张照片&#xff0c;就能立刻得到一段生动有趣的文字描述&#xff0c;还能和其他人分享、讨论这些描述&#xff0c;那会是一个什么样的网站&#xff1f;今天&#xff0c;我们…...