在浏览器中访问Kali(noVNC)

除了我们常用的通过ssh访问Kali Linux,我们也会配置VNC来访问远程图形桌面,但是需要确保安全: VNC仅监听loopback地址并且通过SSH port forward访问。

使用VNC远程访问图形桌面通常需要安装客户端软件,并非每个电脑都会安装VNC client,所以我们希望能够在浏览器中使用VNC,就无需安装客户端。

备注

noVNC是一个基于浏览器的轻量级解决方案,适合单机使用。更为完整的集群解决方案是使用 Apache Guacamole:无客户端远程桌面网关

  • 安装 x11vnc 作为VNC服务,结合NoVNC可以实现一个轻量级解决方案:

    sudo apt update
    sudo apt install -y novnc x11vnc
    
  • 在loopback回环地址上启动VNC会话,这可以确保安全:

    x11vnc -display :0 -autoport -localhost -nopw -bg -xkb -ncache -ncache_cr -quiet -forever
    

此时显示:

The VNC desktop is:      kali:0
PORT=5900
  • 检查监听端口:

    ss -antp | grep vnc
    

显示输出:

tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN

这里有一个问题,虽然使用了 -localhost 但是却监听在所有接口上,和预期不符

改为参数 -listen localhost 但是发现这个参数在命令行参数中间会报错,不过如果这个参数在命令行最后则正确启动监听在回环地址:

x11vnc -display :0 -autoport -nopw -bg -xkb -ncache -ncache_cr -quiet -forever -listen localhost

所以尝试修改上述命令,将 -localhost 放到参数最后,果然也解决了仅监听在回环地址上:

x11vnc -display :0 -autoport -nopw -bg -xkb -ncache -ncache_cr -quiet -forever -localhost
  • 再次检查端口监听:

    ss -antp | grep vnc
    

现在是正确的:

LISTEN 0      32         127.0.0.1:5900        0.0.0.0:*     users:(("x11vnc"<Plug>PeepOpenid=4582,fd=8))
LISTEN 0      32             [::1]:5900           [::]:*     users:(("x11vnc"<Plug>PeepOpenid=4582,fd=9))
  • 运行 noVNC

    /usr/share/novnc/utils/launch.sh --listen localhost:8081 --vnc localhost:5900
    

备注

这里使用参数 --listen localhost:8081 可以强制noVNC监听在回环地址,如果使用 --listen :8081 就会监听在所有端口,则存在安全隐患。

  • 在服务器上启动SSH:

    sudo systemctl enable ssh --now
    
  • 在远程客户端上通过SSH访问:

    ssh kali@192.168.6.7 -L 8081:localhost:8081
    

也可以配置 ~/.ssh/config 添加配置:

Host kali
    HostName 192.168.6.7
    User huatai
    LocalForward 8081 127.0.0.1:8081
../../../_images/novnc-kali-in-browser.png

参考