点击展开更新日志
源起
如果只是有多台主机(内网和外网)需要一个SSH客户端方便管理,就选择客户端即可,比如termius、xterminal,mobaxterm等,因此我在家的电脑上用的也是 termius,只不过在公司,偶尔摸鱼 也想要访问个别主机,如果保留一份密钥在公司电脑不太放心,所以就干脆搭建一个堡垒机,开放互联网访问方式。
或许要问,既然之前都把异地组网弄好了,干嘛不直接远程到家里电脑再SSH?问得好,真要说的话,好像确实没有必要的理由,不管了,我就要。
选择
开源堡垒机还是有很多可选的,首屈一指的自然是 JumpServer,只不过对于个人用户这种小打小闹,最低配置要求都可以做我主力机了,也就只能望而却步了,通过AI问了一嘴,最后选了 NextTerminal ,部署下来整体感受还不错。
有一点要好评的是,开源版本就已经包含了90%以上主要功能,付费的专业版和企业版更多是技术支持、SSO和自定义内容,核心的功能全部开放,非常好评,比某池强多了。不过毕竟人家提供了开源免费版本,最基本的礼貌还是要有的,随口抱怨两句而已。
部署
官方文档已经提供了详细的部署操作:
1 2 3 4 5 6 7 8 9 curl -sSL https://f.typesafe.cn/next-terminal/docker-compose-aliyun.yaml > docker-compose.yaml curl -sSL https://f.typesafe.cn/next-terminal/config.yaml > config.yaml docker compose up -d curl -sSL https://f.typesafe.cn/next-terminal/docker-compose.yaml > docker-compose.yaml curl -sSL https://f.typesafe.cn/next-terminal/config.yaml > config.yaml docker compose up -d
放一下我的 docker-compose.yml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 services: guacd: container_name: NT-guacd image: dushixiang/guacd:latest volumes: - ./data:/usr/local/next-terminal/data restart: unless-stopped networks: - next_terminal next-terminal: container_name: NT-next-terminal image: dushixiang/next-terminal:latest ports: - "2022:2022" volumes: - /etc/localtime:/etc/localtime:ro - ./data:/usr/local/next-terminal/data - ./logs:/usr/local/next-terminal/logs - ./config.yaml:/etc/next-terminal/config.yaml labels: - 'traefik.enable=true' - 'traefik.http.routers.next-terminal.rule=Host(`next-terminal.domain.top`)' - 'traefik.http.routers.next-terminal.entrypoints=websecure' - 'traefik.http.routers.next-terminal.tls=true' - 'traefik.http.routers.next-terminal.service=next-terminal-service' - 'traefik.http.services.next-terminal-service.loadbalancer.server.port=8088' depends_on: - guacd restart: unless-stopped networks: - next_terminal networks: next_terminal: name: next_terminal
我在使用原版文件启动遇到各问题,官方说明的最小规格需求为 2核2G,我的 Docker 宿主机为 4核16G,docker compose up 之后 postgres 数据库容器会崩溃无法启动,拿日志问了AI说可能是OOM内存不够,要加内存限制。正好之前单独创了台虚拟机部署 postgres,所以就直接共用了。
因此相比官方原版,这里增加了 traefik 标签,删除了 postgresql 数据库容器,在 config.yaml 中指定使用自定义数据库。
启动之前,需要提前创建好数据库:
1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE DATABASE nexterminal ENCODING 'UTF8' ;CREATE USER nexterminal WITH PASSWORD 'nexterminal' ;GRANT ALL PRIVILEGES ON DATABASE nexterminal TO nexterminal;GRANT ALL PRIVILEGES ON SCHEMA public TO nexterminal;GRANT ALL PRIVILEGES ON DATABASE nexterminal TO nexterminal;
启动之后,访问 http://<IP>:8088打开 web 界面,第一次打开会要求进行初始化设置。
反向代理
官方文档也提供了详细的反代配置,我这里用的 traefik 做的服务发现,配置如上。
远程访问
既然最终的目的是要从外网访问,下一步就是把域名暴露出去,直接使用 DDNS 将域名暴露出去就可以了。因为之前已经配置过了,也就多加一个域名的事。
事实上,如果要求更加安全,可以找一台公网服务器部署堡垒机,然后在目标主机设置访问IP白名单,只允许堡垒机访问会更安全。