wzshiming / bridge

Bridge is a multi-level proxy that supports clients and servers with multiple protocols. SSHProxy, HTTPProxy, Socks4, Socks5, Shadowsocks.
MIT License
158 stars 15 forks source link

登录shell 终端后累计 两次 `ctl+c` 直接退出了,是否需要优化 bridge 对信号量的处理? #8

Closed zhtianhe closed 11 months ago

zhtianhe commented 11 months ago

测试1:

执行 ssh -o "ProxyCommand=./bridge-win64.bin -p %h:%p -p socks5://xx:xx@ip:xxx "xxxx@xxxxx 登录shell 终端后 两次 ctl+c 直接退出了,是否需要优化 bridge 对信号量的处理?

测试2: 配置在 ~/.ssh/conf 同样问题

测试3:在 vscode 的 Read more about SSH config files 没有问题

测试4:使用 corkscrew 是没有问题的

ProxyCommand corkscrew.exe localhost 10805 %h %p

wzshiming commented 11 months ago

我手上没有 windows 设备暂时没法验证, 但是我的 Mac/Linux 设备上是没有这个现象的 理论上 ctrl+c 的信号应该是发给 ssh, 但按照你的说法 windows 下可能有两种原因

  1. 信号可能同时发给所有子进程
  2. ssh 可能传递了信号 (我猜这个可能性很大)

有几件事可能需要确认

  1. 第一次按下 ctrl+c 时, 是否弹出? https://github.com/wzshiming/bridge/blob/b956c164cccfbe4d14ecb8b0b34235b6802a9a30/cmd/bridge/main.go#L77
  2. 使用 corkscrew 的时候, ssh 退出之后查看 corkscrew 是否还在继续运行
zhtianhe commented 11 months ago

1、win git-bash 中

第一次按下 ctrl+c 时, 弹出:

 2023-07-13T10:42:23.910+0800       INFO    bridge/main.go:77       Wait for the existing task to complete, and exit directly if the signal occurs again

第二次 ctrl+c 时, 弹出:

 client_loop: send disconnect: Broken pip

powershell、cmd 中 ctrl+c、vscode ssh 是没有问题的

ssh.exe -o "ProxyCommand=x:\xxx\gost\bridge-win64.bin -p %h:%p -p socks5://ProxyUser:ProxyPass@ProxyIP:ProxyPort "  sshUser@sshIp

综上所述: 判断 win git-bash ssh 环境问题导致

2、corkscrew 不存在该问题,缺点;对环境有依赖、不支持 代理用户口令验证 3、参考:gost 工具也很不错,GO语言实现的安全隧道 暂时没有找到 ProxyCommand 相关配置。

wzshiming commented 11 months ago

gost 这个我以前还真不知道, 看起来只做代理 server 来着, 我这是 client/server 合一的, 所以 server 部分的功能都是重叠的, 不过看起来 server 部分的功能比 bridge 完善

由于 gost 没做 client, 所以它不会遇到你说的问题也不会支持 ProxyCommand (除非重构了支持 client)