用 go 实现 ssh 客户端(千行左右的代码),一般人用到的 ssh 功能都已支持。

2023-06-03 23:58:21 +08:00
 LonnyWong

开源地址: https://github.com/trzsz/trzsz-ssh

tssh 已实现 ssh 客户端常用的基本功能( 除了 ssh 端口转发 ),一般人用到的 ssh 功能都已支持,欢迎各位大佬试用。

两大额外功能( 亮点 ):

1 、支持选择( 搜索 )~/.ssh/config 中的服务器,进行登录。相当于 tssh 内置了服务器管理功能,并且类似 vim 的操作方式不需要用到鼠标。

2 、tssh 内置支持 trzsz ( trz / tsz ),这在 Windows 平台很有用,解决了 trzsz ssh 上传速度慢的问题。

PS:通过用 go 写一个 ssh 客户端,对 ssh 的原理了解更深入了,特别是 ProxyJump 和 ProxyCommand 相关逻辑。

4694 次点击
所在节点    程序员
33 条回复
mywaiting
2023-06-04 00:20:14 +08:00
赞~ 已经用上~
dianso
2023-06-04 01:31:20 +08:00
能支持 tabby 那种拆分吗?
LonnyWong
2023-06-04 01:39:32 +08:00
@dianso 发一些 “tabby 那种拆分”的网页来看看?我比较少用 tabby ,不太清楚是个什么样的功能。
dianso
2023-06-04 02:28:45 +08:00
@LonnyWong #3 就是这样的

![cb72a3c7ef9060d9adcab865547c5442.png]( https://i.mjj.rip/2023/06/04/cb72a3c7ef9060d9adcab865547c5442.png)
dianso
2023-06-04 02:29:05 +08:00
![cb72a3c7ef9060d9adcab865547c5442.png( https://i.mjj.rip/2023/06/04/cb72a3c7ef9060d9adcab865547c5442.png)
scyuns
2023-06-04 03:05:19 +08:00
赞,看起来挺不错。能支持批量脚本吗
yjd
2023-06-04 04:26:18 +08:00
之前弄连接用 https://github.com/PowerShell/Win32-OpenSSH ,下次有机会试试
LonnyWong
2023-06-04 06:57:00 +08:00
@scyuns 用的是 go 的 ssh 标准库 https://pkg.go.dev/golang.org/x/crypto/ssh ,是有能力支持批量脚本的。批量脚本想做成怎么样交互和执行的呢?
LonnyWong
2023-06-04 07:12:30 +08:00
@dianso 这种分屏,做的最好的是 tmux ,你可以将 tmux 结合 tssh 一起使用的。先用 tssh 登录服务器,然后在服务器上运行 tmux ,就可以用 tmux 的快捷键进行分屏了,具体用法可以网上搜一下 tmux 的教程。
LonnyWong
2023-06-04 07:32:58 +08:00
@scyuns 批量执行的工具,你可以看看这个 https://github.com/shanghai-edu/multissh ,也是用 go 的 ssh 库实现的。如果你有更好的想法,也可以提出来。
jack4536251
2023-06-04 08:00:45 +08:00
能讲下其中的原理吗?
LonnyWong
2023-06-04 08:28:11 +08:00
@jack4536251 刚搜脚本批量运行,找到了 https://cloud.tencent.com/developer/article/1187651 ,说的挺详细的,你可以先看看。tssh 也是类似的。
Monad
2023-06-04 08:55:19 +08:00
想了解一下是否能够内置支持 proxycommand 中通过 nc/corkscrew 的功能?在 Windows 上用 nc.exe 会有奇怪的卡顿感(类似于延迟很高的情况) 但是走 proxifier 则不会 所以怀疑是 nc.exe 的问题
LonnyWong
2023-06-04 09:10:09 +08:00
@Monad ProxyCommand 其实是旧的代理方式了,新的是 ProxyJump 。如果你的代理是 http 协议,那 ProxyJump 搞不定。如果你只是用 ProxyCommand 经过某个跳板机,完全可以用 ProxyJump 代替。

具体可以发你的 ProxyCommand 出来看看?可以把敏感的信息打个掩码之类。
Monad
2023-06-04 09:24:39 +08:00
@LonnyWong ProxyCommand C:\ncat.exe --proxy-type socks4 --proxy 192.168.1.1:1337 %h %p
走的是局域网内的某个 ssh 本地转发的 socks 端口,但是这个版本不支持 socks5 所以指定 socks4
ncat.exe (不是 nc.exe ,一直搞混这两个...)是这里的 https://nmap.org/ncat/
AnroZ
2023-06-04 09:29:22 +08:00
虽然目前用不太到,star 支持
acerphoenix
2023-06-04 09:53:39 +08:00
这个不错,好像是我的菜。
我目前用 windterm ,但有点小问题,windows terminal 能解决,但 windows terminal 不支持 rzsz ,如果我没理解错的话,你这个是相当于把一个 windows terminal 的终端强化成支持 rzsz 的?
我 windows terminal 可以配置一些 profile ,然后在新建 tab 时选择 profile 就进了不同的服务器,用这个,就是在新建 tab 里执行 tssh ,然后再选择服务器就可以了吧?
LonnyWong
2023-06-04 10:07:25 +08:00
@acerphoenix 是的,在新 tab 里执行 tssh ,这时可以选择在 C:\Users\your_name\.ssh\config 中配置好的服务器( 这个配置要自己手写,兼容标准 ssh 的 ),选中某个服务器登录后,就可以使用 trz / tsz 上传和下载了。如果 tssh 带有参数,就和标准 ssh 几乎一样。
Monad
2023-06-04 10:08:01 +08:00
@LonnyWong 感谢 ProxyJump 的思路,之前完全没有了解到这个信息~用这个好很多了。
bequt
2023-06-04 10:13:02 +08:00
@LonnyWong LTSC 版本上为啥不跳出传送文件窗口呢,是不支持 powershell 终端吗?

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

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

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

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

© 2021 V2EX