Casvisor
资产

SSH网关

除了网页终端,Casvisor自己也能接受SSH连接,用户可以用平时就在用的工具连SSH资产:ssh、scp、sftp、rsync、Xshell或VS Code Remote。用户用在Casvisor里登记过的公钥登录网关,Casvisor再用资产自己的账号登录资产。和在浏览器里一样,权限、命令规则和会话列表都照常生效。

开启

网关监听sshGatewayPort指定的端口:

  • conf/app.conf里它是空的,即网关默认关闭。
  • Docker镜像设置了环境变量sshGatewayPort=2222,所以在容器里网关是开着的。用-p 2222:2222把端口映射出来。要关掉,传一个空值:-e sshGatewayPort=。
  • isDemoMode = true时,不论端口怎么设,网关都不开。

sshGatewayHost是给用户复制的命令里显示的主机名。留空就用用户打开Casvisor时的主机名;SSH要通过别的域名访问时(例如ssh.example.com)就设成它。见配置。

网关第一次启动时会生成自己的Ed25519主机密钥,存在数据库里(设了credentialKey就加密保存),所以换容器后密钥不变,共用一个数据库的多台Casvisor也是同一个密钥。它的SHA-256指纹写在日志SSH gateway listening on port 2222那一行里,SSH公钥页面上也有;第一次连接时,和ssh显示的指纹对一下。

网关是独立TCP端口上的普通SSH,不经过HTTPS反向代理。见放在反向代理后面。

登记公钥

网关只认公钥,不支持口令登录,所以它碰不到Casdoor密码;网页登录时的多因素认证对它也不适用。

  1. 还没有密钥的话,用ssh-keygen -t ed25519生成一个。
  2. 在Casvisor里打开SSH公钥页面(/ssh-keys),点添加SSH公钥,粘贴~/.ssh/id_ed25519.pub的内容。

每个用户都能在这里管理自己的公钥,不用找管理员。一个公钥只能属于一个用户。页面上列出每个公钥的指纹和最近使用时间,删掉公钥后它立刻就不能再登录。

每次连接时,网关都会重新去Casdoor读取用户:在Casdoor里被禁用或删除的用户,或者不在allowedUsers里的用户,即使登记了公钥也会被拒绝。用户组和管理员标记同样是现读的,不沿用之前的网页登录。

连接

用户名决定网关打开哪个资产:

命令打开
ssh -p 2222 web-01@casvisor.example.com你所在组织的资产web-01
ssh -p 2222 alice@web-01@casvisor.example.com同上,前面加上你的Casvisor用户名,必须是公钥的主人
ssh -p 2222 other-org/web-01@casvisor.example.com别的组织的资产。只有Casdoorbuilt-in组织的用户能连
ssh -p 2222 alice@casvisor.example.com用户名写你自己、不写资产:弹出一个菜单,列出你能连的SSH资产

菜单按编号、名称、地址和显示名称列出资产,输入编号或名称就连上去,输入q退出。这是给Xshell这类只保存一个主机和一个用户名的工具用的。

资产页面上,SSH资产有一个复制SSH命令按钮,复制出来的命令已经填好了端口和主机。

只能连SSH资产,而且资产要保存了用户名:网关用资产保存的账号(私钥或密码)登录资产,没法向用户要。没有用户名的资产会被拒绝,并提示找管理员设置账号。资产的主机密钥和网页终端一样会被固定,见协议。

不想每次都输端口,可以把网关写进~/.ssh/config:

Host web-01
    HostName casvisor.example.com
    Port 2222
    User web-01

之后ssh web-01、scp file web-01:和VS Code Remote都可以直接用web-01这个名字。

如果公钥已经通过、连接仍被拒绝,原因会以casvisor: ...打印出来,例如you have no permission to connect to the asset: web-01。

能做什么

用途需要的动作
交互式shell(ssh),执行命令(ssh web-01 uptime),退出码原样返回Connect
sftp,以及OpenSSH 9.0起默认走SFTP的scpConnect,写文件要Upload,读文件要Download
scp -O(旧版scp协议)Connect,按方向要Upload或Download
经SSH的rsyncConnect,按方向要Upload或Download
本地端口转发(ssh -L)和Unix socket转发,VS Code Remote要用Connect和Forward

每种文件操作需要Upload还是Download,见文件传输。

转发的连接从资产上发起,和直接SSH登录资产时一样,所以ssh -L 5432:localhost:5432连到的是资产本机上的数据库。

一律拒绝:远程端口转发(ssh -R)、agent转发(ssh -A)和X11转发(ssh -X)。

会话、命令和审计

经由网关的一个SSH连接就是一个会话,不论它里面开了多少个shell、传输和转发。会话的用户代理是客户端的SSH版本,例如SSH-2.0-OpenSSH_9.6。管理员可以像停止别的会话一样停止它,允许它的权限被收回时它也会被断开。

命令会被记录,并按命令规则检查:交互式shell里输入的命令和网页终端一样读取,ssh命令行上带的命令按客户端发来的原文记录。连上资产、每个新的转发目标、经SFTP读写的每个文件,以及新建文件夹、重命名、删除和建链接,都会记进操作日志。

在GitHub上编辑

本页内容