WebSSH2 实战:基于 Node.js 搭建浏览器 SSH 终端
想要通过浏览器管理 Linux 服务器,又不想安装额外的客户端软件?WebSSH2 是个不错的选择。它本质上是一个运行在浏览器中的 SSH 终端模拟器,底层利用 Node.js 处理连接,前端用 xterm.js 渲染界面。
核心特性
这个项目的优势在于轻量且无需额外插件。主要特点包括:
- 零安装:只要有现代浏览器就能访问。
- 多种认证:支持密码、私钥以及键盘交互(如 MFA)。
- 响应式布局:手机或平板上也能顺畅操作。
- 文件传输:从 v2.6.0 起支持 SFTP,可直接拖拽上传下载。
部署方案
Docker 快速启动
这是最省心的方式,适合测试或生产环境快速验证。注意端口映射,默认使用 2222。
docker pull ghcr.io/billchurch/webssh2:latest
docker run --rm -p 2222:2222 ghcr.io/billchurch/webssh2:latest
启动后访问 http://localhost:2222/ssh 即可看到终端界面。
源码部署
如果你需要深度定制,可以从源码构建。项目依赖 npm 包,确保本地已安装 Node.js。
git clone https://github.com/we/webssh2
cd webssh2
npm install --production
npm start
注意:GitHub 上的仓库地址可能因镜像同步有所变动,建议以官方文档为准。如果克隆失败,请检查网络环境。
配置与优化
WebSSH2 遵循 12 要素应用原则,推荐通过环境变量控制行为,而不是硬编码配置文件。
export WEBSSH2_LISTEN_PORT=2222
export WEBSSH2_SSH_HOST=ssh.example.com
export WEBSSH2_HEADER_TEXT="我的运维入口"
这样的好处是方便在不同环境(开发、测试、生产)间切换配置,也便于容器化编排。
安全与认证
在生产环境中,安全性是重中之重。
- HTTPS 强制:不要直接暴露 HTTP 服务,务必配合 Nginx 反向代理开启 TLS。
- 私钥优先:相比密码,SSH 私钥更安全。建议禁用密码登录,仅允许密钥认证。
- 子网限制:利用 IPv4/IPv6 CIDR 设置白名单,防止未授权 IP 尝试连接。
关于键盘交互认证,这通常用于多因素认证场景,配置时需注意超时时间,避免会话挂起。
常见问题排查
遇到连不上或者黑屏的情况,别急着重装,先看看这些点:
- 防火墙:确认服务器防火墙放行了 2222 端口。
- SSH 服务:目标 SSH 服务器是否允许 root 登录或特定用户登录。
- 调试模式:开启调试日志能看清握手过程。
DEBUG=webssh2:* npm start

