使用 ttyd 和 ConnectBot 上 SSH
Update: 有救了 。
放弃追求大一统了,用 YubiKey 的末路就是我锁我自己。
目录
开始
在服务器 ~.ssh/authorized_keys
只记录 GPG auth SSH 公钥的情况下,不带 YubiKey 进服务器终端的选择就只有提供商管理面板的 Console 了,自己整一个别的东西的体验会比这好些。
Cockpit?
以前拿 Cockpit 当网页终端用,当然,它的功能不止于网页终端,有很多可以做的事。由于我用的是 Ubuntu,安装它的最新版本需要开 backports,感觉不方便,前段时间就决定不用了。RedHat 系列的其他发行版可能会用得更舒服些。
ttyd
大概率可以直接用软件包管理器安装,但版本差异可能会影响到配置的写法,有问题就看看 ttyd --help
或 man ttyd
。配置方法多种多样,可以看 官方 wiki ,但需要注意公网访问安全,最好上 SSL 或代理隧道,我用的是 ttyd 本地端口 + nginx 反向代理。
Ubuntu 24.04 LTS 装好后确认 systemd 服务状态,然后修改 /etc/default/ttyd
TTYD_OPTIONS="-W -U www:www -i /tmp/ttyd.sock -H X-WEBAUTH-USER -O login"
-W
- 可写,不加就默认只能看,无法输入-U
- 指定 domain socket 文件用户和用户组让 nginx 有权访问-i
- 指定 domain socket 文件位置-H
- Auth Proxy-O
- 禁止非同源 websocket 连接login
- 登录系统账户
再配置 nginx,带个 basic auth 保险,其余 SSL 部分我就不写了。
location / {
auth_basic "ttyd";
auth_basic_user_file "/etc/apache2/ttyd_htpasswd";
proxy_set_header X-WEBAUTH-USER $remote_user;
proxy_set_header Authorization "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://unix:/tmp/ttyd.sock;
}
重启一下 ttyd 和 nginx 服务应该就能用,登录需要先完成 basic auth,再完成系统账户登录。
ConnectBot
换手机之前还能拿 OpenKeychain 和 TermBot 组合用 YubiKey GPG 上 SSH,但换手机之后就没法用 TermBot(停更,非 64-bit)了,找不到好的替代方案,用 ttyd 的体验极差(一半锅在输入法,一半锅在没有 Esc 等特殊按键)。
摆烂,安装 ConnectBot ,生成密钥,导出公钥加到服务器 ~.ssh/authorized_keys
,舒服了。YubiKey?什么是 YubiKey
结束
即使我有备用 YubiKey,仍然由于怕丢而不怎么随身携带(PayPal 这种垃圾货只允许注册一把 Security Key),并且所有安排上 YubiKey WebAuthn / FIDO2 的服务都没有取消原本的 TOTP 认证。大概是,好像用了 YubiKey,好像又没有用,就这样吧。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。