基于现有的 ssh 库,自己实现一个简单的 ssh 应用。

2020-10-20 16:22:28 +08:00
 Chenamy2017

目前希望使用 C 语言开发一个简单的 ssh 应用(可以登录到主机,发送指令,读到指令的输出)。

用法:sshtest IP PORT USERNAME PASSWORD COMMAND

输出:登录到主机并且执行 COMMAND 后的输出。

目前看到有以下库

libssh:可以实现服务端 /客户端,支持 V1/V2 协议

libssh2:仅实现客户端。

问题:

  1. 已经用 libssh2 实现了,但是在某些主机上(一台华三的交换机)上无法获取到输出,执行过程中无报错,但 libssh2_channel_read()一直返回的是 0 (但前面已经设置为阻塞模式了,按说不应该返回 0 ),有大佬知道吗?

  2. 搜索目前好像用 libssh2 的多一些,为什么?或者那个好?

2581 次点击
所在节点    Linux
10 条回复
zunceng
2020-10-20 16:27:54 +08:00
楼主的问题我也不知道
用 golang 挺简单的 我前前后后写过好几个 ssh tunnel proxy 类型的
Chenamy2017
2020-10-20 16:37:07 +08:00
@zunceng 感谢,或许我需要变一下思路,考虑下其他语言的。
ETiV
2020-10-20 16:41:22 +08:00
为啥要自己开发,ssh 就可以这么用啊……

ssh user@hostname COMMAND
matrix67
2020-10-20 16:46:36 +08:00
@ETiV #3 是啊。 而且一般需求都是批量,这也有 pssh
wslzy007
2020-10-20 16:49:45 +08:00
唉,c 开发,为啥要用 ssh 库呢?直接 openssl 它不香吗
huangmingyou
2020-10-20 17:15:08 +08:00
ssh 还可以签名证书,限制执行的命令。
xcstream
2020-10-20 21:43:16 +08:00
ssh 命令就可以这功能
Chenamy2017
2020-10-21 10:35:09 +08:00
ssh 是个好办法,但有一些缺陷:
1.要是根据反馈再执行相应的命令,那么每次执行要有一个验证过程,影响效率。
2.对于一些设备,命令执行结果很多需要输入回车才会继续显示。

我再研究一下,避免自己开发,使用 ssh 。谢谢大家!
ETiV
2020-10-21 11:22:47 +08:00
不知道你要干啥

自动化?
ansible -m shell 了解一下?
它还有各种其它模块
Chenamy2017
2020-10-21 17:15:38 +08:00
@ETiV 是的,自动化。自动登录设备,自动执行一些命令。
ansible 这个看着好强大,目前我用 expect 测试,可以实现交互。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/716778

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX