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

这篇具有很好参考价值的文章主要介绍了基于PyQt5的图形化界面开发——自制ssh工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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后我们即可连接上我们的服务器:
基于PyQt5的图形化界面开发——自制ssh工具

连接成功后将会给出提示:
基于PyQt5的图形化界面开发——自制ssh工具

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

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

看来这个测试还是非常成功的,完成!
基于PyQt5的图形化界面开发——自制ssh工具

其他PyQt5文章

基于PyQt5的图形化界面开发——自制MQTT客户端

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——模拟医院管理系统

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

基于PyQt5的图形化界面开发——PyQt示例_计算器

基于PyQt5的图形化界面开发——PyQt示例_扫雷

基于PyQt5的图形化界面开发——自制Redis图形化客户端(文末附源码)

基于PyQt5的图形化界面开发——堆栈动画演示

基于PyQt5的图形化界面开发——队列动画演示(https://blog.csdn.net/qq_53381910/article/details/130736891)文章来源地址https://www.toymoban.com/news/detail-457198.html

到了这里,关于基于PyQt5的图形化界面开发——自制ssh工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【pyqt5界面化工具开发-8】窗口开发-QDialog对话框

    目录 一、调用父类的菜单 二、添加更多的布局在对话框内 和前面Qwedget一样的结构(不做过多介绍) 可以参考代码中的注释 这和前面讲的Qwedget窗口布局基本上一样了 运行结果:

    2024年02月11日
    浏览(53)
  • 基于yolov5的pyqt5目标检测图形上位机工具【附工程代码】

    【后附工程代码】这是一个集成yolov5算法的目标检测的上位机软件,主要涉及的界面: B站视频演示 1. 用户登入 2.用户注册 3. 忘记密码(暂未开发) 特别说明:这里的用户登入有俩种方式,主要是使用mysql数据库。 若需要使用自己的数据库,记得将以下的信息改未自己的对

    2024年02月03日
    浏览(46)
  • 基于PyQt5的UI界面开发——信号与槽

    PyQt5采用了一种被称为“信号与槽”机制的编程模式,用于处理对象间的通信和事件处理。在PyQt5中,信号(signal)是对象发出的特定事件,例如按钮被点击、文本被修改等。而槽(slot)是与信号相关联的特定动作或函数。当信号被触发时,与之相关联的槽会被自动调用。 槽

    2024年02月16日
    浏览(45)
  • 基于PyQt5的UI界面开发——对基本控件的介绍

    在PyQt中,控件是用户界面上的可见元素。控件可以包括按钮、标签、文本框、进度条等。每个控件都有自己的属性和方法,可以通过编程方式进行调整和操作。 以下是一些常用的PyQt控件: QLabel(标签):用于显示文本或图片的静态控件。 QPushButton(按钮):用于触发特定动

    2024年02月16日
    浏览(36)
  • PyQT5: 构建图形用户界面的Python指南

    PyQt5是一个Python绑定的跨平台C++库,用于创建丰富的图形用户界面(GUI)。它是Qt库的Python接口,Qt库由Qt公司开发,用于开发GUI程序,也称作应用程序框架。在此,我们将详细介绍如何使用PyQt5创建图形用户界面。 在开始之前,我们需要确保已经在Python环境中安装了PyQt5。如果

    2024年02月13日
    浏览(53)
  • 【PyQt5】构建强大的Python图形用户界面应用程序 -- 入门指南

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月15日
    浏览(48)
  • whisper实践--基于whisper+pyqt5开发的语音识别翻译生成字幕工具

    大家新年快乐,事业生活蒸蒸日上,解封的第一个年,想必大家都回家过年,好好陪陪家人了吧,这篇文章也是我在老家码的,还记得上篇我带大家基本了解了whisper,相信大家对whisper是什么,怎么安装whisper,以及使用都有了一个认识,这次作为新年第一篇文章,我将介绍一

    2024年02月01日
    浏览(43)
  • 界面开发(2)--- 使用PyQt5制作用户登陆界面

    上篇文章已经介绍了如何配置PyQt5环境,这篇文章在此基础上展开,主要记录一下如何使用 PyQt5 制作用户登陆界面,并对一些基础操作进行介绍。 下面是具体步骤,一起来看看吧! 1. 打开 Pycharm 中的 Qt Designer 工具。 2. 选择Main Window模式,创建界面窗口。 3. 移除菜单栏和状态

    2024年02月05日
    浏览(54)
  • 界面开发(1) --- PyQt5环境配置

    第一步:首先安装社区版Pycharm 下载地址:https://www.jetbrains.com/pycharm/download/#section=windows 第二步:安装Anaconda3,配置虚拟环境 下载地址:https://www.anaconda.com/ 第三步:安装 Python 第三方库,包括 pyqt5,pyqt5-tools 和 pyqt5designer 在cmd中使用 pip install pyqt5 , pip install pyqt5-tools , pip in

    2024年04月12日
    浏览(50)
  • 【pyqt5界面化开发-5】网格布局(九宫格)界面

    需要模块:QGridLayout 代码

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包