项目_QT_XShell的AI版

项目介绍

在这里插入图片描述

  这个项目是QT实现的一个XShell的AI版本,实现原XShell的SSH远程连接主机的主要功能,如:有一个控制台,用于输入shell命令,有一个目录窗口,用于文件的跨系统传输等。在此基础上再添加了AI功能模块。
  我们在使用XShell时,总是有这样的场景:那个命令是什么来着,怎么好像忘了,要是我输入需求,有个提示就好了;为什么这个man手册只能是英文的,为什么所有的提示信息都是英文的,我要看中文不行吗。诸如此类的问题。
  本项目在实现XShell原有的SSH连接远程主机,文件的传输等传统的功能基础上,集成了AI大模型。

AI功能模块,增加了如下功能

1.命令优化。用户可以在终端中输入原始的shell命令,如ls;也可以直接输入问题的描述,系统会提示出命令;还可以直接输入需求,系统直接能执行,比如:“把我写的这个./a.out程序添加到环境变量中”,系统就能直接添加环境变量
2.语言修改。man手册和各种英文的提示信息,能在项目中配置,让他们以何种语言显示,如:直接配置显示成中文。
3.自动生成shell脚本。你只需要描述下你的需求,系统能自动生成shell脚本文件。

下面说一说原始的XShell的一些核心功能的实现

1.SSH远程连接。在远程主机(Linux)上,有一个守护进程sshd,他其实是一个tcp协议的 socket 服务端,我们能直接连接他,他接收的数据应用层是SSH协议,默认端口是22。实现SSH远程连接,我只需要在本地构建一个SSH协议的数据包(SSH协议头格式网上有介绍),发送给远程主机建立TCP连接就可以了,我项目中为了方便直接使用了libssh库,他对这个协议做了封装,我操作起来方便些,不用自己构建SSH协议的数据包了。
2.文件传输。文件传输基于SFTP协议,这个也是应用层协议,是基于SSH协议的,他的请求头中,会包含SSH的一些数据,比如,有用于身份验证的公钥信息等,使用这个协议必须要建立SSH连接,它需要依靠SSH协议来提供加密、认证和安全的通信通道,也可以这样理解,sshd这个服务只接受SSH协议的连接,必须要在已连接的基础上,才能传输数据,不然你用SFTP协议封装的数据,你发给谁。这个协议libssh库也做了封装,方便多了,如果没有,我也可以自己写,不影响。

下面说一说项目的总体思路

  看上面这张图,项目的页面模仿的是MobaXterm(感谢提供页面布局参考),右边是控制台,左边是目录栏。这里的控制台可以打开多个,这里考虑到多个窗口,在实际使用中,不太可能多个窗口同时有操作,大多数情况是操作一个窗口,也就是只有一个窗口有新数据显示,所以项目在这一块,放弃使用多线程操作阻塞io,改而使用io多路复用。用户在控制台输入shell命令或是一些需求信息,后台接收到后,直接把数据交给AI大模型,由AI判断用户的输入到底是命令还是需求,如果是需求,就生成对应的命令,如果是命令,就把命令通过llibssh提供的channel发送给远程主机,由远程主机执行命令,如果这个命令有输出结果,那么远程主机会把结果写到channel中,我的后台会有单独的读channel的线程,读到数据就再次交给AI,由AI把数据转成HTML格式,然后再交给前端显示,为什么要有这一步呢,为什么不直接把数据给前端显示呢,因为,远程主机返回的数据中,包含很多前端不认识的转义字符,需要做格式转换。
  好,再说说左边的目录栏,左边是实现文件跨操作系统传输的,使用的是SFTP协议,这个协议上面有介绍过,这里就不再展开了,因为我使用了libssh库,所以一切操作都很便利,以下载文件为例,我只需要调用这个方法就解决了:

sftp_download_file(session, "/remote/path/to/file.txt", "/local/path/to/file.txt");

这个方法的底层我来详细说明下:
  之前已经建立了TCP连接,所以这里就可以直接发送SFTP协议的数据包了,发送时,构建数据包,其实就是一个协议头加数据,协议头就是一串字符串,按照SFTP的要求写就可以了(网上有格式);接收时,按照协议的格式拆包,把数据从数据包中取出来,再用io,把数据写到文件中就成了。当然,如何没有这个库,我也可以自己构建SFTP的数据包发送,并接收远程主机返回的SFTP数据包,再解包,把数据写到文件中(注意TCP粘包的问题哦),就是麻烦了点。

项目中遇到的问题

1.其实一个项目最大的难点,就是写你没写过的功能,一个功能你之前做过,再难也不难,没做过,简单也困难。
2.控制台格式问题。本项目的控制台,其实是一个QTextEdit,这个构件无法直接显示远端主机返回的数据(有很多转义字符无法解析),上面我也提到过,需要用AI把数据格式转换成HTML,不过最初我也不知道怎么办,我想找一个格式转换的库来着,结果没有,总不能自己写一个吧,数据中那么多奇奇怪怪的转义字符,我要是转漏了怎么搞,后来出去吃了个饭,回来突然就悟了,AI大模型在手,还要什么格式转换库啊,真是的。

下面吐槽下AI大模型

  AI大模型集成到了项目中,由于是国外的某AI,创建账号还挺麻烦,麻烦了一个朋友才把账号拿到手,现在听说要涨价了。。。我才拿到账号不到一周啊,割韭菜太着急了吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值