基于PyQt5的图形化界面开发——自制ssh工具

news2024/12/26 9:21:08

基于PyQt5的图形化界面开发——自制ssh工具

  • 0. 前言
  • 1. 第三方库的安装
  • 2. ssh原理
  • 3. 完整代码
  • 4. 演示效果
  • 5. 其他PyQt文章

0. 前言

本节我们使用PyQt5来制作一个简单的ssh小工具。

操作系统:Windows10 专业版

开发环境:Pycahrm Comunity 2022.3

Python解释器版本:Python3.8

第三方库:PyQt5paramiko

1. 第三方库的安装

本节需要安装第三方库PyQt5和paramiko,如果你并不熟悉第三方库的安装,你可以参考以下文章来学习:
Python第三方库安装——使用vscode、pycharm安装Python第三方库

2. ssh原理

SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络中安全地传输数据。它提供了一种安全的远程登录方式,可以在不安全的网络中远程访问和控制计算机。

SSH协议的工作原理如下:

  1. 客户端向服务器发起连接请求,请求连接到服务器的SSH端口(默认为22)。

  2. 服务器收到连接请求后,会向客户端发送一个公钥,客户端使用该公钥对数据进行加密。

  3. 客户端将加密后的数据发送给服务器,服务器使用自己的私钥对数据进行解密。

  4. 服务器将解密后的数据发送给应用程序进行处理,应用程序将处理结果返回给服务器。

  5. 服务器将处理结果加密后发送给客户端,客户端使用自己的私钥对数据进行解密。

  6. 客户端将解密后的数据显示给用户。

在SSH协议中,数据传输过程中使用了加密算法,保证了数据的安全性。同时,SSH协议还支持身份验证,可以使用密码、公钥等方式进行身份验证,保证了连接的安全性。

3. 完整代码

这次不像以前使用Qtdesigner设计,所以仅仅需要这一个文件即可运行。

import sys
import paramiko
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QTextEdit, QFileDialog, QMessageBox

class SSHWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('SSH Tool')
        self.setGeometry(100, 100, 800, 600)

        # 创建主窗口
        main_widget = QWidget(self)
        main_layout = QVBoxLayout()
        main_widget.setLayout(main_layout)
        self.setCentralWidget(main_widget)

        # 创建连接信息输入框
        connect_widget = QWidget(self)
        connect_layout = QVBoxLayout()
        connect_widget.setLayout(connect_layout)
        main_layout.addWidget(connect_widget)

        host_layout = QHBoxLayout()
        host_label = QLabel('Host:')
        self.host_edit = QLineEdit()
        host_layout.addWidget(host_label)
        host_layout.addWidget(self.host_edit)
        connect_layout.addLayout(host_layout)

        port_layout = QHBoxLayout()
        port_label = QLabel('Port:')
        self.port_edit = QLineEdit()
        self.port_edit.setText('22')
        port_layout.addWidget(port_label)
        port_layout.addWidget(self.port_edit)
        connect_layout.addLayout(port_layout)

        username_layout = QHBoxLayout()
        username_label = QLabel('Username:')
        self.username_edit = QLineEdit()
        username_layout.addWidget(username_label)
        username_layout.addWidget(self.username_edit)
        connect_layout.addLayout(username_layout)

        password_layout = QHBoxLayout()
        password_label = QLabel('Password:')
        self.password_edit = QLineEdit()
        self.password_edit.setEchoMode(QLineEdit.Password)
        password_layout.addWidget(password_label)
        password_layout.addWidget(self.password_edit)
        connect_layout.addLayout(password_layout)

        # 创建连接按钮
        connect_button = QPushButton('Connect', self)
        connect_button.clicked.connect(self.connect_ssh)
        connect_layout.addWidget(connect_button)

        # 创建命令输入框
        command_widget = QWidget(self)
        command_layout = QVBoxLayout()
        command_widget.setLayout(command_layout)
        main_layout.addWidget(command_widget)

        command_label = QLabel('Command:')
        command_layout.addWidget(command_label)

        self.command_edit = QTextEdit()
        command_layout.addWidget(self.command_edit)

        # 创建执行按钮
        execute_button = QPushButton('Execute', self)
        execute_button.clicked.connect(self.execute_command)
        command_layout.addWidget(execute_button)

        # 创建输出框
        output_widget = QWidget(self)
        output_layout = QVBoxLayout()
        output_widget.setLayout(output_layout)
        main_layout.addWidget(output_widget)

        output_label = QLabel('Output:')
        output_layout.addWidget(output_label)

        self.output_edit = QTextEdit()
        self.output_edit.setReadOnly(True)
        output_layout.addWidget(self.output_edit)

    def connect_ssh(self):
        host = self.host_edit.text()
        port = int(self.port_edit.text())
        username = self.username_edit.text()
        password = self.password_edit.text()

        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(host, port, username, password)
            self.output_edit.append('Connected to {}:{} as {}'.format(host, port, username))
        except Exception as e:
            QMessageBox.warning(self, 'Error', str(e))

    def execute_command(self):
        command = self.command_edit.toPlainText()

        try:
            stdin, stdout, stderr = self.ssh.exec_command(command)
            output = stdout.read().decode('utf-8')
            error = stderr.read().decode('utf-8')
            if output:
                self.output_edit.append(output)
            if error:
                self.output_edit.append(error)
        except Exception as e:
            QMessageBox.warning(self, 'Error', str(e))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = SSHWindow()
    window.show()
    sys.exit(app.exec_())

4. 演示效果

由于我的服务器是公网IP所以遮挡住了,现在点击Connect后我们即可连接上我们的服务器:
在这里插入图片描述

连接成功后将会给出提示:
在这里插入图片描述

现在我输入了一些比较基础的Linux命令来测试:

whoami ——输出当前所登录的用户
mkdir 文件夹  ——创建一个名为文件夹的文件夹
ls ——查看当前目录下的所以文件

看来这个测试还是非常成功的,完成!
在这里插入图片描述

5. 其他PyQt文章

如果你对PyQt5比较感兴趣,你可以参考以下文章来一起交流学习:
基于PyQt5的图形化界面开发——自制MQTT客户端软件
基于PyQt5的图形化界面开发——自制Redis图形化客户端
基于PyQt5的图形化界面开发——模拟医院管理系统
基于PyQt5的图形化界面开发——PyQt示例_计算器
基于PyQt5的图形化界面开发——PyQt示例_扫雷
基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式中的UML基础

目录 1、UML概述 2、UML的用途 3、UML的构成 4、UML图 5、UML类图 5.1、类的构成 5.2、类与类之间的关系 6、绘制UML图的软件工具 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycl…

java线程组

文章目录 1. 简介2. 线程对象关联线程组:一级关联3. 线程对象关联线程组:多级关联4. 自动归属属性5. 获取根线程组 1. 简介 为了方便某些具有相同功能的线程进行管理,我们可以把线程归属到某一个线程组。线程组中可以有线程对象、线程&#…

【三维激光扫描】实验03:点云着色渲染模式详解

在SiScan软件中,点云的着色模式有:高程彩色、倾斜度、反射强度、自有颜色、点云测站、分隔片、分类7中,本文进行详细讲解。 文章目录 一、高程彩色二、倾斜度三、反射强度四、自有颜色五、分隔片一、高程彩色 高程彩色模式是按点云数据的Z值起算,颜色渐变显示。 二、倾斜度…

【AIGC】10、Chinese CLIP | 专为中文图文匹配设计

文章目录 一、背景二、方法2.1 基础内容2.2 数据集2.3 预训练方法2.4 模型尺寸 三、效果 论文:Chinese CLIP: Contrastive Vision-Language Pretraining in Chinese 代码:https://github.com/OFA-Sys/Chinese-CLIP 出处:阿里达摩院 时间&a…

061:cesium设置棋盘图材质(material-5)

第061个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置棋盘材质,请参考源代码,了解CheckerboardMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专栏目标…

第09章_子查询

第09章_子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果…

SeaweedFs使用-环境准备

SeaweedFs使用-环境准备 1.下载go语言包实现go语言环境2.下载SeaweedFs文件3.安装SeaweedFs SeaweedFs是一款开源的分布式存储软件,在存储大量小文件方面有更好的优化,比较适合存储web项目的图片等文件。 1.下载go语言包实现go语言环境 因为SeaweedFs是…

实战TCP三次握手

开篇 在几乎所有的后端开发面试题中,TCP三次握手绝对是最被面试官青睐的题目之一。但是这个东西,平时开发中看不见,摸不着,对于很多人来说,是纯理论的知识,玄之又玄。但是为了应对面试,又不得不…

《JavaEE》网络编程TCP/IP五层协议万字详解

文章目录 TCP/IP五层协议栈应用层xml (可读性比较好 但是运行效率不高)json(可读性好 但是运行效率不高)prtobuffer(可读性不好 但是运行效率很高) 传输层UDP TCPTCP数据解读32位序号32位确认序号4位首部的长度保留位6位标志位字段…

C语言实现学生管理系统

学习完C语言之后,我们可以通过简单写一个学生管理系统来检验自己学的怎么样。很多计算机系大学生都会学到C语言,对于C语言课程的设计作业可能会感到困难,该篇博客的核心点就是带领读者单独完成学生管理系统,此篇博客附有整个学生管…

【C++ 入坑指南】(11)指针

文章目录 一、概念定义和使用二、空指针 & 野指针2.1 空指针2.2 野指针2.3 小结 三、const 修饰的指针四、指针 和 数组五、指针和函数六、实例 学习 C 的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态…

数据全生命周期管理

数据存储 时代"海纳百川,有容乃大"意味结构化、半结构和非结构化多样化的海量的 ,也意味着批数据和流数据多种数据形式的存储和计算。面对不同数据结构、数据形式、时效性与性能要求和存储与计算成本等因素考虑,应该使用适合的存储…

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)

组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python) 目录 组合预测模型 | ARIMA-CNN-LSTM时间序列预测(Python)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 ARIMA-CNN-LSTM是一种结合了传统时间序列模型和深度学习模型的…

chatgpt赋能Python-python3的下载

Python 3-您在编程路上不可或缺的伙伴 如果您正在寻找一种流行的编程语言,那么Python 3就是一个不错的选择。Python 3作为一种高级编程语言,可以轻松地创建各种应用程序和网站。它是最受欢迎的编程语言之一,就是因为它易于学习和使用。 Pyt…

本地部署 VisualGLM-6B

本地部署 VisualGLM-6B 1. 什么是 VisualGLM-6B2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 VisualGLM-6B6. 启动 VisualGLM-6B7. 访问 VisualGLM-6B8. API部署9. 命令行部署 1. 什么是 VisualGLM-6B VisualGLM-6B 是一个开源的,支持图像、中文和英文…

大模型时代下智能文档处理核心技术大揭秘

大模型时代下智能文档处理核心技术大揭秘 前言一张图全览文档图像分析与预处理图像预处理的整体架构核心技术点应用场景 版面分析与还原整体架构核心技术点应用场景 AI安全文档图像篡改检测 大模型时代思考总结 前言 最近,中国图像图形大会在苏州圆满结束&#xff0…

碳交易机制下考虑需求响应的综合能源系统优化运行(matlab代码)

目录 1 主要内容 架构模型: 需求响应模型: 目标函数: 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文献《碳交易机制下考虑需求响应的综合能源系统优化运行》,解决碳交易机制下考虑需求响应的综合能源系统优化…

Emacs之快速高亮查找字符(九十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

ubuntu22.04静态ip设置(桥接模式、only-host+NAT模式)

在创建一台虚拟机后,默认的方式往往是通过DHCP动态的进行分配,DHCP服务器会告知创建的虚拟机分配到的ip地址,网关地址等信息。所以在创建好虚拟机之后,这些信息都不需要我们来配置,我们直接用就好了。 但是&#xff0…

redis集群之hash槽分析算法

上文提过了 hash取余算法和hash一致性算法 一致性hash算法是为了减少节点数目发生改变时尽可能的减少数据迁移 将所有的存储节点排在首位相连的Hash环上,每个key在计算hash后会顺时针找到临近的存储节点。 而当有节点加入或退出时,仅影响该节点在hash环上…