国产用户在透过 SSH 管理国际服务器时常常被延迟搞得十分沮丧,虽然可以透过ProxyCommand /bin/nc -X 5 -x 127.0.0.1:port %h %p的方式把 SSH 的 TCP 流量包裹在其他任意协议里面,但纯 QUIC/UDP 访问远程服务器终端的方式也许有它的优点.
Mosh 使用 UDP,但依赖于 OpenSSH 进行初次会话的认证.
本文介绍的 SSH3 可完全独立于 OpenSSH server/client使用,而且使用起来非常方便.(是否提高远程终端的反应性待观察),操作有危险,请完整阅读完项目README后使用.
安装
go install github.com/francoismichel/ssh3/cmd/...@latest
服务器
首次运行,生成 cert/key pair
ssh3-server -generate-selfsigned-cert -url-path /XXXXXXXXXXXXX -bind 0.0.0.0:<port>
或者若你有域名 example.com 解析到该机,也可自动获取 Let’s Encrypt 的证书:
ssh3-server -generate-public-cert example.com -url-path /XXXXXXXXXXXXX -bind 0.0.0.0:<port>
会在当前目录下生成 cert.pem, priv.key.检视证书指纹,供后面客户端连接时参考
openssl x509 -outform DER -in cert.pem | openssl dgst -sha256 -binary | openssl base64
之后仅需运行:
ssh3-server -url-path /XXXXXXXXXXXXX -bind 0.0.0.0:<port>
客户端
ssh3 -privkey ~/.ssh/<SSH key> root@<ip>:<port>/XXXXXXXXXXXXX
注意这里的 SSH key 对应的是 ~/.ssh/authorized_keys 里配置的公私钥 (而非先前服务器生成的 cert/key pair)
提示你确认证书指纹是否符合,若是则将 host 保存至 ~/.ssh3/known_hosts,之后无需再确认。