Casvisor
资产

协议

SSHVNCRDPTelnet
默认端口225900338923
由谁处理Casvisor(Go)Casvisor(Go)Casvisor(Go,gordp)Casvisor(Go)
浏览器里xterm.js终端noVNC画布画布xterm.js终端
登录方式私钥、密码、keyboard-interactiveVNC密码用户名和密码,经NLA认证在提示符处输入用户名和密码
复制、粘贴动作不限制由前端限制由服务端限制不限制
文件传输文件面板、SFTP、scp、rsync无文件面板、重定向的磁盘无
命令记录和规则有无无有
录像有有有有
实时旁观有有有有
本地客户端经由SSH网关无无无

每种协议都可以经由网域网关连接;只要没关掉录像,每个会话都会录像。

SSH

Casvisor用Go的golang.org/x/crypto/ssh连接,申请xterm-256color终端,通过WebSocket转给浏览器里的xterm.js。终端大小跟随浏览器窗口。

资产有私钥时Casvisor先用私钥登录,再试密码。服务器的主机密钥会被固定:第一次连接时,Casvisor把它的SHA-256指纹记进资产的指纹,之后服务器出示的密钥不一样就拒绝连接,并提示用户主机密钥变了。如果这是预期内的变化(比如服务器重装了),清空指纹再连一次。

同一个SSH连接还通过SFTP承载终端的文件面板。终端里输入的命令会被记录并按命令规则检查,管理员可以实时旁观。

SSH资产也可以经由SSH网关用你自己的ssh、scp、sftp、rsync或VS Code Remote连接。补丁管理作用的也是SSH资产。

终端用的是浏览器自己的复制粘贴,所以权限里的复制和粘贴限制不了它。

VNC

Casvisor自己建立到VNC服务器的TCP连接,完成RFB握手,包括VNC密码认证。浏览器里的noVNC拿到的是一个无需认证的连接,所以VNC密码一直留在服务器上。如果服务器拒绝了密码,它给出的原因会显示给用户。

画面上方的工具栏有全屏、剪贴板对话框和Ctrl+Alt+Del等组合键。只有权限里有复制时,服务器上的剪贴板内容才会传给用户;有粘贴时,文字才会发到服务器。这项检查在前端执行。

RDP

Casvisor用gordp自己连接RDP,这是为Casvisor写的纯Go RDP客户端。它和服务器协商TLS和网络级身份验证(NLA,即CredSSP加NTLMv2),用资产的账号登录,把桌面发给浏览器,鼠标和键盘再反向传回去。密码不会离开服务器。支持Windows Server、Windows 10和11,以及基于FreeRDP的服务端,例如Ubuntu的远程桌面。

和SSH一样,服务器的TLS证书也会被固定:第一次连接时把它的指纹记进指纹,以后证书不一样就拒绝连接。Windows会不时更新自签名的RDP证书,遇到这种情况,清空指纹再连一次。

画面

  • 图形管道。 Casvisor像Windows自带的客户端一样申请RDP图形管道(GFX),并解码其中的ClearCodec和RemoteFX Progressive编码。不走图形管道的服务器会改发位图更新,gordp同样能解码。
  • 整帧绘制。 画面按服务器发来的帧整帧绘制,而不是一块一块地画。
  • 高分屏。 桌面按浏览器的实际像素大小打开,并把显示缩放比例告诉Windows,所以文字是清晰绘制的,而不是拉伸出来的。
  • 远程光标。 鼠标指针用服务器给的形状,例如文本光标或调整大小的箭头。
  • 调整大小。 桌面跟随浏览器窗口的大小,停止拖动半秒后生效,不用重新连接。不支持调整大小的服务器保持原来的大小,桌面缩放到窗口里显示。

工具栏有全屏、剪贴板对话框、允许传文件时的文件按钮,以及组合键:Ctrl+Alt+Del、Ctrl+Alt+Backspace、Windows键,以及Windows加D、E、R或X。

剪贴板

文字在两个方向都能像平常一样复制:在远程桌面上复制的文字会放进你的剪贴板,浏览器窗口获得焦点时,你剪贴板里的文字会发到远程桌面。工具栏的剪贴板对话框可以手动做同样的事。只交换文字,不交换文件和图片。

两个方向都在服务端限制:没有复制时,Casvisor根本不向服务器要剪贴板内容;没有粘贴时,浏览器发来的文字会被丢弃。每次复制和粘贴都会以clipboard-copy或clipboard-paste写进操作日志,带上文字内容,最多1000字节。

文件传输

用户对资产有上传或下载时,Casvisor会把一个磁盘重定向进会话,Windows里显示为\\tsclient\casvisor;工具栏的文件按钮会在桌面旁边打开同一个磁盘的面板。传文件分两步:在面板里上传,再在远程桌面上从这个磁盘打开;或者在远程桌面上存到这个磁盘,再从面板下载。见文件传输。

还不支持的

  • H.264。 gordp不解码AVC编码,所以不会申请它们,Windows改发ClearCodec和RemoteFX Progressive。
  • 远程应用(RemoteApp)。 只能打开整个桌面,不能只打开单个发布的程序。
  • 输入美式键盘以外的字符,例如用输入法打字。按键按美式键盘的键位发送。
  • 旧版RDP安全层。 既不支持TLS也不支持NLA的服务器连不上。

Telnet

Casvisor自己连接Telnet,用和SSH相同的终端显示。它协商XTERM-256COLOR终端和窗口大小,所以终端跟随浏览器窗口。

Telnet协议本身没有登录这一步,所以Casvisor替用户输入账号:设备第一次打印出以login:、username:或user name:结尾的提示时发送用户名,第一次出现password:提示时发送密码,不区分大小写。资产没有保存账号时,和SSH一样,连接时让用户输入。Casvisor不检查登录是否成功,用户在终端里能看到设备的回应。

Telnet会话里输入的命令和SSH一样会被记录、按命令规则检查,管理员也能实时旁观。也和SSH一样,终端用的是浏览器自己的复制粘贴,复制和粘贴限制不了它;Telnet没有文件传输。

Telnet适合只有它可用的网络设备和老系统;Casvisor(或它的网域网关)和设备之间的所有内容都是明文传输。

在GitHub上编辑

本页内容