开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7406|回复: 62
收起左侧

[易源码分享] ssh连接linux支持库修复版带demo,支持多线程响应结果正常

[复制链接]
发表于 2023-1-18 17:41:37 | 显示全部楼层 |阅读模式   湖北省武汉市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本人小白,上次弄完curl支持库后,想到试试ssh,本来以为很简单,结果翻遍了论坛,
帖子挺多,但是逐一尝试之后,总是有各种问题,主要问题如下:
1. 连接或者执行命令很慢
2. 没有回显结果
3. 不能静态编译
4. 不能内存加载
5. 回显结果异常(有结果但是结果显示不对,仿佛是上次命令返回的结果)
6. 调试正常,编译后闪退

然后还有一些劝退贴,劝说放弃易语言,用C#,python之类的实现,
我倒还真的因为这,去看了C#和python,也捣鼓出了一些东西,但总体还是不甘心,
所以反复翻论坛的帖子,反复尝试,最终弄了一个还可以的支持库出来了

感谢论坛所有大佬相关的帖子,特别是以下两位大佬:
1. 最新libssh2库 例子
这个我真的是花了好长时间研究,几乎完美,
连接和执行命令很快,支持多线程,回显结果正常,可以静态编译内存加载,libssh2.dll也很新,
唯一的问题就是断开连接的时候,程序闪退,这个我解决不了,然后放弃了,希望大佬之后有时间可以修复
因为这个版本集成了较为完整的新版libssh2.dll,后续说不定可以基于这个做密钥登录和文件上传
2. 最新SSH模块,可直接返回结果
这个也是研究学习了好久,大佬封装了模块,连接和执行命令很快,可以静态编译内存加载,libssh2.dll应该是大佬重新编译过的,
运行没有闪退,异常处理的很好,唯一的问题就是回显结果有点问题,我看帖子下面有人反馈这个问题,但是没有回复,
这个我本来是放弃了的,但是其它的都有问题,兜兜转转又回来了,回显结果异常我觉得还是可以处理的,
基于大佬的模块,我做了回显结果的修复模块,写了一个支持多线程的例子,可以做到连续发送命令显示结果,

这里用了模块反编译工具,如果管理和大佬觉得不妥,可以联系我修改,希望大佬可以尽快修复这个问题


简单说明一下我修复libssh2.ec的地方:
  
子程序名返回值类型公开备 注
SSH2客户Duan_发送命令文本型 
参数名类 型参考可空数组备 注
session整数型
command文本型多个命令使用“&&”连接,如:cd ../&&ls
error整数型
变量名类 型静态数组备 注
响应结果文本型 
响应结果地址整数型 
响应结果长度整数型 
空白文本文本型 
error = 匿名程序集变量_1.调用函数 (“ssh_channel_exec”, session, 取地址_文本型 (command), 取指针地址_整数型 (响应结果地址), 取指针地址_整数型 (响应结果长度))
如果真 (响应结果长度 > 0)
响应结果 = 到文本 (编码转换 (指针到字节集 (响应结果地址, 响应结果长度), #编码_UTF_8, #编码_GB2312, ))
' 响应结果不对,并不是发送了上一次的命令,而是取返回结果的时候,长度计算错了,
' 结合其他大佬的代码,似乎是这里共用了一段地址空间,取完结果后没有清除上一次的响应结果,导致长度取的最大长度而不是实际长度
' 我的修复方案是: 每次得到返回结果后,将这段内存空间填充空白文本,然后删尾空,这样结果就正常了
空白文本 = 取空白文本 (响应结果长度)
写到内存 (到字节集 (空白文本), 响应结果地址, 响应结果长度)
响应结果 = 删尾空 (响应结果)
' 处理换行问题
响应结果长度 = 取文本长度 (响应结果)
响应结果 = 子文本替换 (取文本左边 (响应结果, 响应结果长度), 字符 (10), 字符 (13)字符 (10), , , )
返回 (响应结果)


i支持库列表   支持库注释   
iconv编码转换支持库


这是我写的ssh连接linux的demo代码:
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
session整数型  
状态整数型  
线程池鱼刺类_线程池  
临界区鱼刺类_临界许可  
连接成功逻辑型  
命令序号整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
线程池.创建 (, , , )
按钮连接.禁止 = 假
按钮断开.禁止 = 真
连接成功 = 假
命令序号 = 1
状态 = SSH2客户Duan_初始化 ()
调试输出 (状态)
子程序名返回值类型公开备 注
_按钮连接_被单击  
变量名类 型静态数组备 注
地址文本型 
端口文本型 
用户文本型 
密码文本型 
地址 = 编辑框主机.内容
端口 = 编辑框端口.内容
用户 = 编辑框用户.内容
密码 = 编辑框密码.内容
session = SSH2客户Duan_连接 (地址, 到整数 (端口), 用户, 密码, , )
如果 (session > 0)
编辑框日志.加入文本 (“***连接服务器成功***”#换行符 )
' 禁用服务器信息输入
编辑框主机.禁止 = 真
编辑框端口.禁止 = 真
编辑框用户.禁止 = 真
编辑框密码.禁止 = 真
按钮连接.禁止 = 真
按钮断开.禁止 = 假
连接成功 = 真
编辑框日志.加入文本 (“***连接服务器失败***”#换行符 )
连接成功 = 假
编辑框日志.加入文本 (“*************************”#换行符 )
子程序名返回值类型公开备 注
_按钮断开_被单击  
SSH2客户Duan_断开 (session, )
编辑框日志.加入文本 (“*****断开服务器*****”#换行符 )
编辑框主机.禁止 = 假
编辑框端口.禁止 = 假
编辑框用户.禁止 = 假
编辑框密码.禁止 = 假
按钮连接.禁止 = 假
按钮断开.禁止 = 真
子程序名返回值类型公开备 注
__启动窗口_将被销毁  
如果真 (连接成功)
SSH2客户Duan_销毁 ()

子程序名返回值类型公开备 注
_按钮发送_被单击  
如果真 (连接成功 = )
信息框 (“请先连接服务器”, 0, “提示”, )
返回 ()
' 这里用多线程,防止执行命令时间长导致界面卡顿
如果 (线程池.投递任务 (&send, , ))
调试输出 (“创建任务失败”)
调试输出 (“创建任务成功”)

子程序名返回值类型公开备 注
_按钮发送多条命令_被单击  
如果真 (连接成功 = )
信息框 (“请先连接服务器”, 0, “提示”, )
返回 ()
' 这里用多线程,防止执行命令时间长导致界面卡顿
如果 (线程池.投递任务 (&sendMulti, , ))
调试输出 (“创建任务失败”)
调试输出 (“创建任务成功”)

子程序名返回值类型公开备 注
send  
变量名类 型静态数组备 注
执行命令文本型 
响应结果文本型 
执行命令 = 编辑框命令.内容
sendSingle (执行命令)
子程序名返回值类型公开备 注
sendMulti  
变量名类 型静态数组备 注
响应结果文本型 
sendSingle (“uptime”)
sendSingle (“ls”)
sendSingle (“ls -l”)
sendSingle (“pwd”)
子程序名返回值类型公开备 注
sendSingle  
参数名类 型参考可空数组备 注
执行命令文本型
变量名类 型静态数组备 注
响应结果文本型 
临界区.进入 ()
编辑框日志.加入文本 (“序号:”到文本 (命令序号)#换行符 )
编辑框日志.加入文本 (“*执行命令:” + 执行命令 + #换行符 )
响应结果 = SSH2客户Duan_发送命令 (session, 执行命令, )
调试输出 (响应结果)
编辑框日志.加入文本 (“*响应结果:”#换行符 )
编辑框日志.加入文本 (响应结果)
编辑框日志.加入文本 (“*************************”#换行符 )
命令序号 = 命令序号 + 1
临界区.退出 ()


i支持库列表   支持库注释   
spec特殊功能支持库


有相关问题,请联系我,大家共同学习进步~

最后附上我修复的模块和程序源码(包含依赖模块)
ssh连接linux支持多线程静态编译内存加载回显命令结果正常.zip (243.37 KB, 下载次数: 427)
VX截图_20230118171948.png

评分

参与人数 7好评 +6 精币 +12 收起 理由
kyo9766 + 1 感谢分享,很给力!~
oldtxt + 1 + 2 支持开源~!感谢分享
易语言资源网 + 1 + 3 开源精神必须支持~
易语言QA + 1 + 2 测试了2台服务器,发现lsblk内容过多,返回内容就会不完整,少了后面很多内容。.
飘在空气里 + 1 支持开源~!感谢分享
zlw310282 + 1 + 2 感谢分享,很给力!~
quary888 + 1 + 2 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

发表于 2024-11-12 17:18:37 | 显示全部楼层   浙江省杭州市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2024-10-12 14:54:22 | 显示全部楼层   广东省深圳市
6666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2024-10-12 14:54:09 | 显示全部楼层   广东省深圳市
太感谢了 正好用得上
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2024-10-7 17:06:30 | 显示全部楼层   福建省莆田市
感谢分享    感谢分享
回复 支持 反对

使用道具 举报

发表于 2024-8-4 08:38:05 | 显示全部楼层   北京市北京市
66666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 14 天

发表于 2024-7-25 11:00:17 | 显示全部楼层   山东省青岛市
学习一下 ssh连接linux,感谢分享
回复 支持 反对

使用道具 举报

结帖率:57% (4/7)

签到天数: 4 天

发表于 2024-7-22 13:52:41 | 显示全部楼层   香港特别行政区*
没得返回上一层目录  cd无效
回复 支持 反对

使用道具 举报

发表于 2024-7-13 15:06:12 | 显示全部楼层   美国
有一个bug  不能进sudo -i   root权限
回复 支持 反对

使用道具 举报

发表于 2024-7-13 15:01:30 | 显示全部楼层   美国
牛逼呀sasdfasdf
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表