gotty 在浏览器中共享 linux 终端
2021-07-10 tech go linux 6 mins 2 图 2164 字
来看下官方的说明:
GoTTY - Share your terminal as a web application
GoTTY is a simple command line tool that turns your CLI tools into web applications.
GoTTY 是一个简单的基于 Go 语言的命令行工具,它可以将终端(TTY)作为 web 程序共享。它会将命令行工具转换为 web 程序。
它使用 Chrome OS 的终端仿真器(hterm)来在 Web 浏览器上执行基于 JavaScript 的终端。hterm + web socket 想法灵感来自 Wetty 项目。
一、安装
可以使用go自行编译,也可以直接使用官方编译好的二进制包:https://github.com/yudai/gotty/releases
我使用了1.0.1这个版本:
export VER="1.0.1"
wget https://github.com/yudai/gotty/releases/download/v${VER}/gotty_linux_amd64.tar.gz
tar xvf gotty_linux_amd64.tar.gz
chmod +x gotty
mv gotty /usr/local/bin/
echo "https://github.com/yudai/gotty"
/usr/local/bin/gotty -verson
二、使用
参考官方github使用 https://github.com/yudai/gotty#usage
既可以使用配置文件,也可以直接在命令行中带上。
2.1 简单使用
Usage: gotty [options] <command> [<arguments...>]
例如:
gotty top
gotty df -h
直接在后边带上命令即可。
gotty也提供了较多的自定义能力,比如:
- 指定监听的ip和端口
- 开启SSL
- 启用账号密码登陆
- 启用浏览器可操作命令行
具体还是参考官方文档。
2.2 个人命令参考
下面是我的运行命令,指定了监听的ip和端口,并让其进入 tmux 的会话,达到命令行共享的能力:
/usr/local/bin/gotty -a $KELU_LOCAL_IP -p 38480 tmux attach -t gotty
使用 linux 默认的 screen 命令也可以达到这样的效果。
2.3 nginx配置
nginx 转发配置示例,主要是注意把 websocket 转发的参数配上:
server {
listen 80;
server_name xxx.xxx.xxx;
access_log /log/nginx.access.log;
error_log /log/nginx.error.log;
location / {
proxy_pass http://xxx.xxx.xxx.xxx:38480;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Accept-Encoding gzip;
}
}
2.4 systemd配置
光有命令其实不足以日常维护,我把gotty注册成为一个systemd服务,由系统进行管理。配置参考:
[Unit]
Description=GoTTY
Documentation=https://github.com/yudai/gotty
After=network.target
[Service]
User=root
Group=root
Environment=TERM=xterm-256color
ExecStart=/usr/local/bin/gotty -a x.x.x.x -p 38480 tmux attach -t gotty
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
需要关注点的主要是显式声明终端信息:
Environment=TERM=xterm-256color
运行命令即可:
cp gotty.service /etc/systemd/system
systemctl enable gotty
systemctl start gotty
systemctl status gotty