收藏 分销(赏)

采用SSH.NET开发SSH客户端_陈满.pdf

上传人:自信****多点 文档编号:293134 上传时间:2023-07-12 格式:PDF 页数:3 大小:2.35MB
下载 相关 举报
采用SSH.NET开发SSH客户端_陈满.pdf_第1页
第1页 / 共3页
采用SSH.NET开发SSH客户端_陈满.pdf_第2页
第2页 / 共3页
采用SSH.NET开发SSH客户端_陈满.pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、2023.6电脑编程技巧与维护1开发背景学院信息中心维护人员需要一款Linux工具来管理学院服务器,包括文件和文件夹的监控与管理,以及远程执行协助故障排除命令。因此,需要创建一个SSH客户端,该客户端同时需具备以下基本功能:连接到服务器、执行命令并获取结果、保存服务器连接信息、传输文件和目录。从安全性的角度出发,这个客户端必须保护SSH连接和数据库连接的机密性,同时具备安全的身份验证机制。此外,该客户端应该具有图形用户界面(GUI)以方便用户使用操作。客户端要求使用C#语言,并集成SSH.NET和SQL Sugar两个类库来实现不同功能。客户端是一个Windows桌面应用程序,可以使用WinF

2、orm或WPF等技术进行开发。2相关技术SSH.NET是C#语言开发的SSH类库,用于创建和使用SSH连接。它遵循MIT开源协议,可以免费使用。SSH.NET可以轻松地通过.NET应用程序实现SSH连接,并进一步开发SSH客户端。SSH.NET强调灵活性、开源性、易用性和安全性。需要注意的是,SSH.NET类库也有一些局限性,例如,不支持SFTP协议上传文件夹、文件流等操作,需要开发者进行一些额外的封装和处理。总体来说是一款非常出色的SSH类库,可以方便且快速地实现SSH连接和操作。3项目功能项目采用C#开发,通过SSH.NET组件连接Linux,并运用SSH协议进行远程管理,主要功能包括服务

3、器链接管理、文件上传下载、文件夹上传下载、远程命令执行、服务器连接远端备份等。3.1获取服务器信息当系统初始化后,用户需要先将系统连接到一个Linux服务器,才能进行其他相关操作。当连接到服务器后,系统会首先初始化服务器的相关信息,包括服务器的内存使用量、中央处理器(CPU)使用量、进程相关参数、磁盘占用量等信息。查询服务器进程信息采用执行命令ps-ef,具体操作如下。(1)创建一个SSHClient对象。(2)执行CreateCommand命令,将ps-ef作为参数传 递 进 去。(3)执行BeginExecute方法的命令。BeginExecute方 法 是 一 个 异 步 方 法。系 统

4、 采 用While方式循环判断SSHClient的BeginExecute是否结束,如果没有结束,首先读取返回的每一行信息,将每行信息中的空格按照正则表达式将用逗号替换为#;然后输出为一个字符串数组;最后绑定到界面上的一个DataGridView。查询内存占用执行命令free-m,具体操作如下。(1)创建一个包含类型、可用、已用、总数的Datatable数据集合。(2)循环读取Linux的返回数据,将内容添加到Datatable里面。(3)绑定到界面上。相关实现代码如下。var dtMemory=SSHUtils.GetMemoryAndSwap(client2);var memorySum=

5、dtMemory.Value(0,总数);var memoryFree=dtMemory.Value(0,可用);var memoryUsed=dtMemory.Value(0,已用);lbmemorySum.Text=$Math.Round(double.Parse(mem-oryUsed)/1024,2)G/Math.Round(double.Parse(memory-Sum)/1024,2)G;progres sBarMemory.Value=Convert.ToInt32(double.Parse(memoryUsed)*100/double.Parse(memorySum);lbme

6、moryUsed.Text=$progressBarMemory.Val-ue%;查询磁盘占用执行命令df-Th,执行完该命令后,进行如下操作。(1)系统会创建一个包含路径、可用大小的Datatable数据集。(2)解析服务器回传的每行作者简介:陈满(1983),男,本科,研究方向为信息系统集成开发。采用 SSH.NET 开发 SSH 客户端陈满,李录(华北理工大学,河北 唐山063210)摘要:介绍了使用 C#语言结合 SSH.NET 类库和 SQL Sugar 类库开发一款 Linux 远程管理的安全外壳(SSH)客户端的方法。该客户端实现了多种功能,包括文件上传、文件下载、文件夹上传、文

7、件夹下载、远程命令执行、服务器链接管理、代理服务器信息管理、隧道信息管理、服务器链接远端备份等。关键词:SSH.NET 类库;SQL Sugar 类库;restsharp 类库170DOI:10.16184/prg.2023.06.0522023.6电脑编程技巧与维护数据,用逗号分割,将数据分别存储在DataRow的对应列中。(3)将这个DataRow保存到Datatable中。3.2服务器链接管理服务器连接管理功能采用SQL Sugar类库进行数据库 操 作,本 地 采 用SQLite数 据 库,云 端 备 份 采 用MySQL数据库。为了云端和本地能够进行无差别的备份,在数据库设计中主键采

8、用guid方式。数据库表目前有3个,包括SSHinfo表、SSHproxy表、SSHtunnel表。SSHinfo表存储服务器链接信息、SSHproxy表存储代理信息、SSHtunnel表存储隧道信息。(1)SSHinfo表作为基础表,存储服务器链接信息,包括ID、Name、Remark、Host、Password、User、Port、Batch等字段,分别表示编号、链接名称、备注信息、主机信息、密码、用户名、端口号、批次。(2)SSHproxy表存储代理信息,包括ID、SSHin-foID、Name、Type、Host、Port、User、Password、IsEn-able等字段,分别表示

9、编号、SSHinfo编号、代理名称、代理类型(socks5http)、主机地址、端口、用户名、密码、是否启用。(3)SSHTunnel表存储隧道信息,包括ID、SSHin-foID、name、monitorport、type、bindIP、targetport、isEanble等字段,分别表示编号、SSHinfo编号、隧道名称、类型、绑定IP地址、目标端口、是否启用。该系统采用Sqlsugar类库操作数据库,首先配置实体类,然后采用CodeFirst方式构建数据库。值得注意的是,如果本地采用SQLite数据库,那么不用创建数据库,系统会自动根据实体类创建数据库,如果是MySQL、MsSQL等数

10、据库,则需要首先创建数据库,然后系统会通过InitTables的方式创建表结构。系统会根据实体类中配置的表名、铸件名称、外键关系等信息创建表结构。3.3文件上传文件上传功能需要用户选择一个本地文件,选择完成后,系统首先创建一个SSHClient对象,然后获取上传文件的大小,执行上传功能,根据上传命令的回调方法,实时返回用户上传的进度信息,并反馈到主界面的进度条上,最后当用户文件上传完毕后,系统会输出success信息,进度条也会随之到达100%。3.4文件下载功能文件下载功能要求用户首先将要下载的文件的路径写到界面的路径文本框中,然后单击“文件下载”按钮,此时系统会提示用户选择文件存放目录,当

11、用户选择存放目录后,系统会自动下载该文件到用户选择的目录下。在执行文件下载操作时,系统会建立一个SSHClient对象(该对象的功能执行相关命令),同时会创建一个SFtpClient对象(该对象的功能是执行文件下载最终操作)。SftpClient对象建立服务器连接,然后系统尝试采用OpenWrite命令打开本地要下载的文件,准备写入操作。SftpClient对象执行DownloadFile方法进行文件下载,在该方法的最后得到一个Action异步回调参数,通过该参数可以在界面上显示下载进度、修改progressbar的状态。3.5文件夹上传功能SSH.NET默认没有文件夹上传功能,这个功能需要自

12、己编写业务逻辑。文件夹上传功能是用户选择一个要上传的本地文件夹,例如,c:softzhineng。系统会首先获取到该文件夹的所有文件列表的字符串数据,然后遍历该字符串数组,替换每个项目中的c:soft为空,将 替换为/,保证能够上传到Linux服务器下,再将数据存储到一个新的字符串数组中,例如,这里命名为string fi-nalArray,遍历这个finalArray数组,最后调用文件上传功能将数组中的每个项目都上传到Linux服务器。这样会按照原来的文件夹结构上传整个Windows文件夹到Linux服务器。3.6文件夹下载用户在路径文本框中输入要下载的服务器上文件夹路径,例如,/root/

13、soft,然后单击“文件夹下载”按钮,系统会要求用户选择一个本地存储路径,例如,这里选择c:soft。系统会遍历服务器上/root/soft目录中所有文件并存储一个字符串数组,然后执行文件下载功能,下载每个文件到本地路径c:soft目录下。3.7远程执行命令远程执行命令一般包括以下5个步骤。(1)创建一个SSH连接实例,指定连接参数,例如,主机名、端口号、登录用户名和密码等信息。(2)连接到服务器并验证身份。使用连接实例中的Connect方法连接到服务器,并对该连接进行身份验证,以确保安全性。(3)执行Linux命令。使用连接实例中的Create-Command方法创建一个命令对象,并使用命令

14、对象的Execute方法来执行Linux命令。(4)获取输出结果。使用命令对象的标准输出和标准错误流来获取命令执行的输出结果。(5)关闭连接。在处理完所有的命令后,关闭SSH连接,释放资源。采用SSH.NET执行远程命令需要注意以下3点。(1)文件位置。采用SSH.NET执行Linux命令需要1712023.6电脑编程技巧与维护注意命令的位置,如果该命令没有在系统中注册,即没有建立软连接,那么就只能首先cd到该命令的目录下,然后执行该命令。例如,程序名称为abc,参数为c,目录为/root/xx,那么命令格式如下。cd/root/xx;abc-c;(2)多个命令一起执行。如果执行多条命令,那么

15、各命令之间采用分号分隔,格式如下。ls-al;ps-a;lsof-i:9999(3)执行这条命令会报错,格式如下。nohup./youApp/dev/null 1&2&这条命令表示在后台运行一个程序,并忽略挂起信息,将程序输出重新定向到/dev/null,使得程序在后台运行,并且不会有输出到终端。因为SSH.NET类库采用CreateCommand方法执行或输出远程返回的命令,所以会产生冲突。建议如果远程Linux命令包含丢弃所有输出的命令,就不要用回显方式执行操作。3.8云端备份云端备份功能的目的是保证服务器的连接数据能够跨个人计算机(PC)使用,同时保证数据的完整性。如果用户不小心把本地数

16、据库删掉或程序误复制到其他计算机上,那么可以通过从云端导入到本地数据库的方式恢复相关数据。采用计划任务方式定时备份服务器连接数据到云端MySQL数据库,保证了数据的安全。(1)采用SQL Sugar类库创建相关的实体类库,执行codefirst功能创建相应的MySQL数据库表。当用户单击云端备份按钮时,系统会检索远程MySQL数据库中的最大的batch字段的值,采用xxxxx语句。(2)遍历SSHinfo、SSHproxy、SSHtunnel 3表,将表中的数据获取到一个数据集datatable上,遍历datat-able,将这个datatable中的batch字段+1,然后采用SQL语句,将

17、其批量插入到远程MySQL中。用户可以选择某个版本进行版本功能查看,在打开云端管理界面后,系统初始化时,会将数据库中的SSHInfo表按照batch进行分组,然后返回一个列表,在初始化时,会遍历该列表,将数据添加到combobox。用户可以选择某个特定的版本号,例如,选择了“6”,说明用户操作参数为batch=6,那么,当用户单击“查看版本”按钮时,系统会进行单表查询,按照batch=6进行检索。返回的数据集合被绑定到界面的dgvSSHInfo控件中。3.9代理功能在系统中加入了代理功能,每个SSHinfo对象对应多条SSHproxy代理对象,但是只能使用一个,也就是多条SSHproxy对象中

18、只有一条数据是enable的。当用户填写完代理数据后,单击“测试链接”按钮,此时系统会建立一个WebProxy对象,采用用户提供的主机IP及端口进行对象创建。然后尝试通过HttpWebRequest对象,以Get方式访问http:/这个网址,设 置HttpWebRequest的Pro xy属 性 为 刚 刚 建 立 的Webproxy对象,如果成功返回IP地址数据,则说明该代理地址信息可以使用,否则说明该代理信息不能使用。3.10隧道功能系统中的隧道功能主要是对每个SSHinfo对象进行内网映射,每个SSHinfo对应多条隧道相关信息。客户端会将该本地端口转发到远程服务器上,建立一个SSH隧道

19、。在本地机器连接该本地端口时,实际上是在与远程服务器上的指定端口建立连接,SSH客户端会将传输的数据通过SSH隧道传输到远程服务器,并将响应的数据返回本地机器。这样就可以实现在本地机器与远程服务器间直接进行数据传输。使用隧道后,原本需要在本地机器与远程服务器上建立多个连接,现在可以使用一个连接来实现。4结语演示了使用C#语言中的SSH.NET类库对Linux服务器进行管理,并且使用SQL Sugar类库来实现数据库操作。重点介绍了使用SSH.NET类库进行Linux服务器的文件上传和下载、文件夹上传和下载,以及远程命令执行等功能。参考文献1李贺.SELinux中使用非标准端口配置SSH登录J.

20、网络安全和信息化,2021(11):138-139.2陈超,李春颖,陈科燕.基于Web SSH技术的Lin-ux远程桌面的原理与实现J.长江信息通信,2021,34(3):138-140.3赵永华.设置SSH密钥进行远程登录J.网络安全和信息化,2021(3):125-127.4苏庆林,李蕾.Python基于SSH协议实现Linux系统远程管理方法研究J.信息系统工程,2019(12):51-52.5麦兴宾.SSH隧道下应用协议识别的网络安全研究J.计算技术与自动化,2019,38(3):141-146.6刘建臣.巧用SSH命令飞传文件J.网络安全和信息化,2019(10):90-92.172

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服