团队里管着几十台服务器,最后都会走到同一个问题:谁在什么时候连了哪台机器,做了什么?
常见的做法是共享账号、把 SSH 密码发在群里,或者大家一起用同一个跳板机账号。真出了事,登录日志里只有一行 IP ,查不到人;有人把密码带走,也无从知道。
堡垒机就是解决这个的。但看了一圈开源的选项:
- JumpServer:国内事实标准,但 RDP 代理、数据库的原生客户端代理( Magnus )、远程应用这些放在企业版里;
- Teleport:AGPL ,社区版二进制对企业规模和收入有限制;
- Next Terminal:2.0 起服务端闭源,免费版限 100 个资产;
- Boundary:仓库已经归档;
- Warpgate:Apache-2.0 ,Rust ,单二进制,是目前最接近「完全开源」的对手。
我们想要的是:功能完整、一个二进制就能跑、能接自己的 SSO 。找不到,就自己写了 Casvisor 。
连接
SSH:网页里是 xterm.js 终端,旁边带一个文件面板,走 SFTP 上传下载。
RDP:自己写的纯 Go 客户端 [gordp]( https://github.com/casvisor/gordp),支持 https://github.com/casvisor/gordp)%EF%BC%8C%E6%94%AF%E6%8C%81 NLA 、GFX 图形管道( ClearCodec 和 RemoteFX Progressive ,和 Windows 自带客户端一样的画质路径)、高 DPI 下的清晰字体、远程光标、剪贴板、跟随窗口改大小、通过重定向的磁盘传文件。Windows Server 、Windows 10/11 都连过,FreeRDP 那一类主机也能连。
VNC:noVNC ,VNC 的认证由后端做,浏览器拿不到 VNC 密码。
Telnet:给交换机、老设备用,自动填资产里存的账号。
SSH 网关:
ssh -p 2222 [email protected],scp 、sftp 、rsync 、Xshell 、VS Code Remote 都能用,用公钥登录,权限和网页里是同一套。网域网关:机器在另一个机房、或者在公司 NAT 后面,Casvisor 直连不到时,用一个 SSH 跳板机中转;连跳板机都没有的网络,可以在里面随便找台机器跑
casvisor agent,它主动连出来,不监听端口。密码和私钥都是加密存库的,SSH 主机密钥和 RDP 证书首次连接时记下来,之后变了就拒绝连接。用户全程看不到服务器的密码。
控制
权限按 用户 / 用户组 资产 / 资产标签 来配,动作有连接、复制、粘贴、上传、下载、端口转发,可以限来源 IP 段和有效期。用的是 Casbin 。
命令规则:正则匹配,命中就拦(不把回车发给目标机器,改发 Ctrl+C )或只告警。网页终端和 SSH 网关都生效。
撤销立即生效:改权限、删权限、权限到期,已经连着的会话会被断开。
审计
四种协议的会话都录像,回放就在浏览器里,用的是实时连接那套代码。SSH 和 Telnet 的录像还能下载成 asciicast 。
在线会话可以实时旁观,也可以直接断掉。
SSH/Telnet 的命令记录是从一个虚拟屏幕里读的,Tab 补全、上箭头调历史、中文、行内编辑都能记准; vi 、top 这种全屏程序里的回车和输密码不记。
文件传输和所有 API 改动都在操作日志里。
运维
顺带做了补丁管理:SSH 资产可以扫描待装的系统更新,一键安装、重启。Windows 走 Windows Update 的 COM 接口,Linux 支持 apt / dnf / yum 。
部署
docker run -d --name casvisor -p 19000:19000 -p 2222:2222 \ -v casvisor-db:/db -v casvisor-recordings:/recordings casbin/casvisor默认 SQLite + 自带账号,管理员口令打印在日志里,第一次登录后改掉。要 SSO 、MFA 、LDAP 、社交登录,接 Casdoor 就行; Casdoor 的用户组直接能用在权限里。
老实说的部分
- 没有数据库代理( MySQL / PostgreSQL 的网页连接和 SQL 审计)和 K8s ,JumpServer 社区版这两个都有;
- 一个资产只有一组系统账号,没有多账号、自动改密、访问申请工单;
- 没有资产树和批量导入,资产多了管理起来比较笨;
- 录像只能存在本机目录,还不能放 S3 / OSS ;
- 本地账号模式没有 MFA ,要 MFA 得接 Casdoor ;
- 命令审计靠读虚拟屏幕,不是把键盘输入全录下来,全屏程序里的操作看不到。
在线演示: https://demo.casvisor.com (有一个假的 SSH 和一个假的 VNC 可以连)
文档: https://casvisor.org
代码: https://github.com/casvisor/casvisorApache-2.0 ,欢迎 issue 和 PR 。
主楼- RapidRiver2小时前⭐️ 新访客3845
这个可以的,思路挺清晰。
换个方案吧,这个维护成本太高。
不如直接上 Go,性能好很多。