Sublarge

// Linux · 2026-05-19

Shellinabox 使用指南:基于 Web 的终端模拟器

Shellinabox是一款基于Web的开源终端模拟器,可通过浏览器直接访问远程服务器终端。核心特性包括零客户端依赖、SSL/TLS加密、防火墙友好等。支持多系统安装(Debian/Ubuntu/RHEL/CentOS),提供源码编译选项。配置文件位于/etc/default/shellinabox或/etc/sysconfig/shellinaboxd,可自定义端口、SSL证书等参数。命令行参数支持后台运行、调试模式、静态文件服务等功能,适合需要Web终端访问的场景。

Shellinabox(发音 “shell-in-a-box”)是由 Markus Gutschke 开发的一款开源、基于 Web 的 AJAX 终端模拟器。它内置了一个 Web 服务器,通过浏览器即可提供原生 Shell 的外观和体验,无需安装任何客户端插件,只需一个支持 JavaScript 和 CSS 的现代浏览器即可访问远程服务器的终端。


一、核心特性

  • 零客户端依赖:无需安装 PuTTY、OpenSSH 等工具,纯浏览器访问
  • SSL/TLS 加密:默认启用 HTTPS,支持自签名或可信证书
  • 防火墙友好:仅需开放一个 HTTP/HTTPS 端口,适合只允许 Web 流量的环境
  • VT100 模拟器:完整的终端仿真,支持颜色、自动补全、复制粘贴等
  • 多服务支持:可配置多个服务路径,如 SSH 代理、本地 Shell、自定义命令等
  • 安全限制:默认禁止 root 登录,需通过普通用户切换,增强安全性

二、安装指南

2.1 Debian / Ubuntu 系统

# 直接通过官方仓库安装
sudo apt-get update
sudo apt-get install -y shellinabox

# 查看安装文件清单
dpkg -L shellinabox
bash6 行

2.2 RHEL / CentOS / Fedora 系统

# 安装 EPEL 源(CentOS/RHEL 需要)
sudo yum install -y epel-release

# 安装 shellinabox 及 OpenSSL 依赖
sudo yum install -y openssl shellinabox
bash5 行

2.3 源码编译安装(通用)

适用于需要最新特性或自定义编译选项的场景:

# 安装编译依赖
# Debian/Ubuntu:
sudo apt-get install -y git libssl-dev libpam0g-dev zlib1g-dev dh-autoreconf

# RHEL/CentOS:
sudo yum install -y git openssl-devel pam-devel zlib-devel autoconf automake libtool

# 克隆源码并编译
git clone https://github.com/shellinabox/shellinabox.git
cd shellinabox
autoreconf -i
./configure --prefix=/usr/local/shellinabox
make && sudo make install
bash13 行

三、配置文件详解

3.1 配置文件位置

系统 配置文件路径
Debian/Ubuntu /etc/default/shellinabox
RHEL/CentOS/Fedora /etc/sysconfig/shellinaboxd

3.2 配置示例(CentOS/RHEL)

编辑 /etc/sysconfig/shellinaboxd:

3.3 配置示例(Debian/Ubuntu)

编辑 /etc/default/shellinabox:

SHELLINABOX_PORT=8888
SHELLINABOX_ARGS="--no-beep -s /:SSH:10.1.10.117"
bash2 行

四、命令行参数全解

以下是 shellinaboxd -h 输出的完整参数说明及实用解析:


五、常用启动配置示例

5.1 基础启动

# 后台运行,使用 /tmp 目录下的证书,默认端口 4200
shellinaboxd -b -c /tmp

# 指定端口 8080
shellinaboxd -b -c /tmp -p 8080

# 前台调试模式
shellinaboxd -d -p 8080
bash8 行

5.2 SSH 代理模式

# 代理连接到远程 SSH 服务器(HTTPS)
shellinaboxd -b -s /:SSH:192.168.1.100

# 禁用 SSL,纯 HTTP 代理(内网使用)
shellinaboxd -t -b -s /:SSH:192.168.1.100

# 多服务配置:根路径登录本地,/who 路径显示在线用户
shellinaboxd -t -s /:LOGIN -s /who:nobody:nogroup:/:w
bash8 行

5.3 本地 Shell 模式

# 绑定本地 bash(需 root 权限)
shellinaboxd -d -s /terminal1/:user:group:/home/user:/bin/bash

# 标准本地登录(使用系统 login 程序)
shellinaboxd -b -s /:LOGIN
bash5 行

5.4 主题与样式

# 黑白主题,禁用 SSL 菜单,后台安静运行
shellinaboxd -t -b -q --css=shellinabox/white-on-black.css

# 提供用户可选主题(右键菜单切换)
shellinaboxd --user-css "Normal:+black-on-white.css,Reverse:-white-on-black.css" -s /:LOGIN
bash5 行

5.5 安全加固配置

# 仅本地监听 + 禁用 SSL(配合 Nginx/Apache 反向代理)
shellinaboxd --localhost-only --disable-ssl -b -t --no-beep

# 禁用蜂鸣 + 禁止切换传输模式
shellinaboxd -b --no-beep --disable-ssl-menu -s /:SSH:192.168.1.100
bash5 行

六、SSL/TLS 证书配置

6.1 自动生成证书

Shellinabox 首次启动时会自动在证书目录生成自签名证书(/var/lib/shellinabox/certificate.pem),无需手动干预。

6.2 手动生成自签名证书

# 创建证书目录
mkdir -p /var/lib/shellinabox
cd /var/lib/shellinabox

# 生成 x509 格式的 PEM 证书(公钥+私钥)
openssl req -new -x509 -nodes -out server.crt -keyout server.key -days 365 \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=IT/CN=your-server-ip"

# 合并为 shellinabox 所需的格式
cat server.crt server.key > certificate.pem

# 如果是域名访问,文件名需为 certificate-域名.pem
# 例如:cat server.crt server.key > certificate-example.com.pem
bash13 行

6.3 使用可信证书

将 Let’s Encrypt 或其他 CA 签发的证书合并为 PEM 格式:

cat your_domain.crt your_domain.key > /var/lib/shellinabox/certificate-yourdomain.pem
bash1 行

七、服务管理与防火墙

7.1 系统服务管理

# 启动服务
sudo systemctl start shellinabox      # systemd
sudo service shellinabox start        # SysVinit

# 停止服务
sudo systemctl stop shellinabox

# 重启服务
sudo systemctl restart shellinabox

# 开机自启
sudo systemctl enable shellinabox
sudo chkconfig shellinaboxd on        # CentOS 6
bash13 行

7.2 防火墙配置

# firewalld (CentOS/RHEL 7+)
sudo firewall-cmd --permanent --add-port=4200/tcp
sudo firewall-cmd --reload

# 或指定自定义端口
sudo firewall-cmd --permanent --add-port=6175/tcp
sudo firewall-cmd --reload

# iptables (旧版系统)
sudo iptables -A INPUT -p tcp --dport 4200 -j ACCEPT
sudo service iptables save
bash11 行

八、反向代理配置

当需要通过域名访问或集成到现有 Web 服务时,建议配置反向代理。

8.1 Nginx 配置

注意:使用反向代理时,shellinabox 需添加 --localhost-only --disable-ssl 参数。

8.2 Apache 配置

<Location /shell>
    ProxyPass http://localhost:4200/
    ProxyPassReverse http://localhost:4200/
    Order allow,deny
    Allow from all
</Location>
apache6 行

九、访问与使用

9.1 浏览器访问

https://your-server-ip:4200
text1 行

首次访问时会提示证书不受信任(自签名证书),点击“高级” → “继续前往”即可。

9.2 登录界面

  1. 输入系统用户名(注意:root 用户默认被禁止登录)
  2. 输入密码
  3. 成功进入 Shell 环境

安全提示:如需 root 权限,请先使用普通用户登录,再执行 su - 或 sudo -i 切换。

9.3 右键菜单功能

在终端空白处右键点击,可访问以下功能:

  • 样式切换:黑白主题、彩色终端、单色模式
  • 字体调整:增大/减小字体
  • 传输模式:SSL/明文切换(如未禁用)
  • 复制粘贴:支持浏览器标准快捷键

十、故障排查

问题现象 可能原因 解决方案
无法启动,提示端口占用 4200 端口被占用 修改配置文件更换端口
证书错误,无法 HTTPS 访问 证书不存在或格式错误 检查 /var/lib/shellinabox/certificate.pem
root 无法登录 安全限制 使用普通用户登录后切换
中文显示乱码 浏览器编码或系统 locale 设置 LANG=zh_CN.UTF-8
无法复制粘贴大段文本 浏览器安全限制 分批次粘贴或使用文本编辑器

十一、安全建议

  1. 修改默认端口:避免使用 4200,改用随机高位端口
  2. 强制 HTTPS:不要长期使用 -t 禁用 SSL
  3. 配合反向代理:使用 Nginx/Apache 提供额外的访问控制和日志
  4. 限制登录用户:禁止 root,使用普通用户 + sudo
  5. IP 白名单:通过防火墙限制访问来源
  6. 定期更新:关注 GitHub 仓库获取安全更新

十二、总结

Shellinabox 是一款轻量级、易部署的 Web 终端解决方案,特别适合以下场景:

  • 防火墙限制仅允许 HTTP/HTTPS 流量的环境
  • 临时需要 SSH 访问但无法安装客户端的公共电脑
  • 嵌入式设备或 IoT 设备的远程管理
  • 快速构建基于浏览器的运维平台

虽然功能不如现代 Web SSH 工具(如 ttyd、Wetty)丰富,但其稳定性和低资源占用使其在特定场景下仍有不可替代的价值。

原文 https://blog.csdn.net/2301_79518550/article/details/161211187