# -*- coding:UTF-8 -*-
"""
@author: dyy
@contact: douyaoyuan@126.com
@time: 2023/11/16 22:37
@file: ssh工具.py
@desc: 脚本提供了ssh登录,ssh文档上传,ssh文档下载,ssh公钥配置等功能,以及优良的用户体验
"""
# region 引入必要的依赖
import os
from enum import Enum
import json
import subprocess
模块名 = 'DebugInfo'
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}=55.2.0")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
from DebugInfo.DebugInfo import *
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
模块名 = 'paramiko'
try:
import paramiko
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
import paramiko
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
模块名 = 'difflib'
try:
import difflib # 需要安装 difflib 模块,以支持字符差异对比操作
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
import difflib
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
模块名 = 'paramiko'
try:
import paramiko
except ImportError as impErr:
print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")
print(f"尝试安装 {模块名} 模块:")
try:
os.system(f"pip install {模块名}")
except OSError as osErr:
print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")
exit(0)
else:
try:
import paramiko
except ImportError as impErr:
print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
exit(0)
# endregion
# 定义一个 命令行参数类,用于解析和记录命令行参数
class 命令行参数类(入参基类):
def __init__(self):
super().__init__()
self._添加参数('srcDir', str, '引用的路径')
self._添加参数('srcDoc', str, '引用的文档')
self._添加参数('everything服务端口', str, 'everything HTTP 服务端口', '22')
# 添加定制属性
self.ssh接口列表: list[ssh接口类] = []
# region 访问器
@property
def jsonCfg(self) -> str:
if 'jsonCfg' in self._参数字典:
return self._参数字典['jsonCfg'].值
else:
return ''
@jsonCfg.setter
def jsonCfg(self, 值: str):
if 'jsonCfg' in self._参数字典:
self._参数字典['jsonCfg'].值 = str(值)
@property
def srcDir(self) -> str:
if 'srcDir' in self._参数字典:
return self._参数字典['srcDir'].值
else:
return ''
@srcDir.setter
def srcDir(self, 值: str):
if 'srcDir' in self._参数字典:
self._参数字典['srcDir'].值 = str(值)
@property
def srcDoc(self) -> str:
if 'srcDoc' in self._参数字典:
return self._参数字典['srcDoc'].值
else:
return ''
@srcDoc.setter
def srcDoc(self, 值: str):
if 'srcDoc' in self._参数字典:
self._参数字典['srcDoc'].值 = str(值)
@property
def everything服务端口(self) -> str:
if 'everything服务端口' in self._参数字典:
return self._参数字典['everything服务端口'].值
else:
return ''
@everything服务端口.setter
def everything服务端口(self, 值: str):
if 'everything服务端口' in self._参数字典:
self._参数字典['everything服务端口'].值 = str(值)
# endregion
# region ssh候选列表
def 解析Json(self,
jsonCfg: str = None,
encoding: str = 'utf-8',
画板: 打印模板 = None):
"""
从指定的json文档中(如果不指定,则从 jsonCfg 参数指定的json文档中)读取配置参数,将值赋值给同名的命令行参数
:param jsonCfg: 可以指定jsonCfg文档
:param encoding: 可以指定jsonCfg文档的编码格式,默认为 utf-8
:param 画板: 提供消息打印渠道
:return: None
"""
画板 = 画板 if isinstance(画板, 打印模板) else 打印模板()
画板.执行位置(self.__class__, self.解析Json)
if not jsonCfg:
if 'jsonCfg' in self._参数字典.keys():
jsonCfg = self._参数字典['jsonCfg'].值
jsonCfg = str(jsonCfg if jsonCfg else '').strip()
if not jsonCfg:
画板.提示调试错误('jsonCfg 路径无效')
return None
if not os.path.isfile(jsonCfg):
画板.提示调试错误(f'jsonCfg 不是有效的 json 文件路径: {jsonCfg}')
return None
if not jsonCfg.endswith('.json'):
画板.提示调试错误(f'jsonCfg 不是 json 格式的文件: {jsonCfg}')
画板.调试消息(f'待解析的 jsonCfg 文件是: {jsonCfg}')
encoding = str(encoding if encoding else 'utf-8').strip()
jsonDic: dict
try:
with open(jsonCfg, 'r', encoding=encoding) as f:
jsonDic = json.load(f)
except Exception as openExp:
画板.提示调试错误(f'打开并读取 json 文档时遇到错误: {openExp}')
jsonDic = {}
if not jsonDic:
画板.提示调试错误(f'未解析到有效的 json 内容: {jsonCfg}')
return None
jsonDic字典: dict = {}
for 键, 值 in jsonDic.items():
# 去除键前后的空格
键 = str(键).strip()
if 键:
jsonDic字典[键] = 值
已匹配的参数: dict[str, 入参基类._参数结构类] = {}
未匹配的参数: dict[str, 入参基类._参数结构类] = {}
for 参数 in self._参数字典.values():
if 参数.名称 in jsonDic字典:
参数.值 = jsonDic字典[参数.名称]
if str(参数.值).strip() == str(jsonDic字典[参数.名称]).strip():
已匹配的参数[参数.名称] = 参数
if 'ssh接口列表' in jsonDic字典.keys() and jsonDic字典['ssh接口列表']:
# 解析ssh接口配置
ssh接口列表 = jsonDic字典['ssh接口列表']
参数 = 命令行参数类._参数结构类(名称='ssh接口列表')
参数.值 = ssh接口列表
已匹配的参数['ssh接口列表'] = 参数
for 接口 in ssh接口列表:
ssh接口: ssh接口类 = ssh接口类()
if '主�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是一个python脚本工具,主要用于快捷的搜索文档并通过ssh将其上传到指定的ssh服务端,或者从ssh服务端快捷的搜索文档并下载到本地。工具包中有一个 ssh工具.bat 脚本,该脚本可以用于启动 ssh工具.py 脚本,双击即可运行,在linux中,也可以直接使用 python ssh工具.py 来启动 py 脚本。脚本中集成了链接ssh服务端、上传文档、上传文件夹、下载文档、下载文件夹、分发ssh公钥等功能。工具包中有一个 cfg.json 配置文件,用户可以方便的将常用的ssh服务端信息进行整理保存,以便可以方便快捷的进行ssh连接。
资源推荐
资源详情
资源评论
收起资源包目录
ssh工具 python 脚本.zip (3个子文件)
ssh工具.py 91KB
ssh工具.bat 597B
cfg.json 314B
共 3 条
- 1
资源评论
- 2301_772263552024-10-20资源很赞,希望多一些这类资源。
团圆吧
- 粉丝: 1512
- 资源: 51
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功