一款基于 Web 不依赖 SSH 协议的 SSH 终端模拟器 - shellinabox

一、背景

由于种种原因,服务器有时候会出现可以 ping 通但 ssh 却连不上的情况,或者是连上断开连上断开各种不稳定,或者防火墙只允许某些流量通过。不过不用担心,即使发生这种情况,我们依然有办法来访问远程系统,而且,不需要安装任何类似于 XShell 或 Putty 的通讯工具,也不用安装任何插件或第三方应用软件,你只需要有一个支持 JavaScript 和 CSS 的现代浏览器。

这就是 Shell In A Box,shellinabox 是由 Markus Gutschke 开发的一款自由开源的基于 Web 的 Ajax 的终端模拟器,它使用 AJAX 技术,通过 Web 浏览器提供了类似原生的 Shell 的外观和感受。

附图感受下:

preview.gif

二、安装

项目主页:GitHub

1、Debian/Ubuntu

# apt install shellinabox

2、RHEL/CentOS/Fedora

# yum install shellinabox

注:需 安装 epel 源.

PS:如果觉得这样太没技术含量了,可以源码安装~

三、配置

shellinabox 侦听端口默认为 4200,你可以将此端口更改为任意数字,以防别人猜到。

Debian/Ubuntu

# sed -i "s/PORT=4200/PORT=666/g" /etc/default/shellinabox   //换端口
# ufw allow 666/tcp  //开放端口
# ufw reload
# systemctl restart shellinabox  //重启服务

RHEL/CentOS/Fedora

# sed -i "s/PORT=4200/PORT=666/g" /etc/sysconfig/shellinaboxd   //换端口
# firewall-cmd --zone=public --add-port=666/tcp --permanent  //开放端口
# firewall-cmd --reload
# systemctl enable shellinaboxd  //开机运行
# service shellinaboxd start  //启动

四、使用

1、添加用户

root 用户不能用于登录,只允许普通用户登录,所以新建一个,到时用 sudo -i 切换即可:

# useradd -d "/home/test" -s "/bin/bash" test //添加用户
# chmod +w /etc/sudoers //CentOS 启用 sudo 功能
# sed -i '92 atest    ALL=(ALL)       ALL' /etc/sudoers //在 92 行,root 之后
# chmod -w /etc/sudoers

2、配置 SSL

可以用可信机构签发的证书,也可以自签发,自签发命令可参考:

# openssl req -new -x509 -nodes -out server.crt -keyout server.key

shellinabox 支持 x509 打包的 pem 证书(公钥加私钥),如果要域名访问,则保存的格式应该是 certificate-域名.pem,IP 访问则是 certificate.pem

# cat server.crt server.key > /var/lib/shellinabox/certificate-example.com.pem

3、启动服务

# service shellinaboxd restart

(或 /usr/sbin/shellinaboxd -u shellinabox -g shellinabox --cert=/var/lib/shellinabox --port=666  -s /:LOGIN)

4、登录地址

打开浏览器,输入地址:https://域名:666(记得吗?端口这里我们改成 666 了)。

shellinabox.webs.png

如果证书是自签发,会出现如上不受信任的错误提示,继续前往即可,如果按照 2、配置 SSL 操作 则不会有这提示(域名)。

shellinabox.user.png

多次登录失败会终止会话,点 Connect 即可重新登录。

5、使用

使用上基本与 SSH 操作没有太大区别,高亮、自动补齐、复制粘贴等等功能都支持,大家可以自行体验。

shellinabox.shell.png

拓展:通过反代访问:

当希望使用反向代理方式时,需要填写启动参数 -localhost-only ,另外如果代理服务器不支持 SSL,则 –disable-ssl 参数也需要填写 。

例:

shellinaboxd –localhost-only –disable-ssl -b -t –css=shellinabox/white-on-black.css

Apache 的参考配置:

<Location /shell>
ProxyPass http://localhost:666/
Order allow,deny
Allow from all
</Location>

nginx 的参考配置:

location  /  {
          proxy_pass http://127.0.0.1:666;
}

五、注意及故障排查

1、shellinabox 不是 SSH 客户端或任何安全软件,它仅仅是一个应用程序,能够通过 Web 浏览器模拟一个远程系统的 Shell,同时,它和 SSH 没有任何关系,意味着这不是可靠、安全地远程控制远程服务器的方式,无论如何,你都应该避免在任何公共网络上运行它,至少,套个 SSL。
2、对于 CTRL、ALT、WIN、ESC 这些键的中断截取,可能在不同的浏览器上会出现失败。比如在 IE 上可能不被允许截取 ALT 键,而始终将其解释为菜单的快捷键。此时同时按下 WIN+CTRL 或许会有效。
3、内部剪切板可以通过右键访问,但 IE 浏览器不行。
4、有的浏览器会限制并发请求的连接数,这限制了多少 AJAX 终端可以同时打开。如出现这方面的问题,需要用户对本地浏览器并发连接数进行修改。
5、登录出现 no shell: Permission denied 错误,这是 SELinux 引起的,禁用即可,即修改 /etc/selinux/config 文件中的 SELINUX="enforcing"disabled


参考链接:
1、《Shellinabox Wiki
2、《Shellinabox:基于 Web 的远程 Terminal 模拟器安装使用详解
3、《OGIN service not working on CentOS 7 (SELinux) #342


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 linuxssh教程shellinabox 的文章

 本文最后更新于 2017/10/30 16:21:42,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 系统 > 一款基于 Web 不依赖 SSH 协议的 SSH 终端模拟器 - shellinabox