• 魔改novnc ,指定别名、指定ip+端口都能访问远程vnc server


    前提

     

    前提1,selenium grid配置

    我的是用的selenium grid集群作为远程的vnc server,所以,如下:

     

    selenium grid 集群的docker镜像有,一些无关的我就马死了

     

     

    集群管理界面:

     

     

    如果不知道怎么配置selenium grid集群的,可以看我之前的: python爬虫 - 配置强有力的js绕过神器-selenium grid分布式集群

     

    前提2,novnc正常使用

     

    然后我novnc的token.conf文件如下:

     

    node1: xxxx:35008
    node2: xxxx:35009

     

    好,我现在用浏览器访问  http://<novnc server host>:<novnc server port>/vnc.html?path=?token=node1  ,

     

    输入密码secret之后正常打开:

     

     

    这样我就访问了我的别名为node1实际为xxxx:35008的vnc server上了

     

    此时如果你的不能正常访问,自行检查重新配置,怎么配置novnc就不多说了,网上教程一大堆

     

    在网上有的教程的同时,大多都有把远程的vnc server的ip和端口取个别名,放在token.conf文件里面,这样的话访问起来确实比较方便,就不用再输入繁琐的ip和端口号了,万一ip输入错误还要检查半天是吧?

     

    问题

     

    但是在实际的开发工作中,我们可能会有如下的场景,我们不止以上两个vnc sever,可能会有多个,而且还可能连接别人配置好的vnc server,那我每次有新的vnc sever加入,是不是都得重新写入到token.conf文件,然后再次的重启novnc才行呢?而且在重启中途,有可能你同事连上某个节点的vncv server 正在操作中呢,你突然就重启了,这样肯定是不太合理的,而且这样是不是更繁琐,每有一个新的就要重写配置文件,重启服务,当然如果你实际的vnc sever 是固定的话,以上指定别名的方式绝对是够用了

     

    而我说的这个场景的话,确实不太行,所以需要魔改,魔改过程就不多说了,直接改./noVNC/utils/websockify/websockify/token_plugins.py文件,你novnc装在哪就自己找了,进入noVNC目录到我给的这个路径,改token_plugins.py的这里:

     

    解决问题

     

     

    魔改代码

     

    把41行的lookup方法:由以下

    改成这样:

    def lookup(self, token):
        if self._targets is None:
             self._load_targets()
        if token in self._targets:
             return self._targets[token]
        else:
            if re.search(r'd{2,3}(.d{1,3}){3}:d{2,5}', token):
                return token.split(':')
            else:
                 return None
    

      

     

     

     

     

    
    

     

    就完了,就这么点。

     

    lookup方法的作用是啥,可以在同级目录创建一个测试文件调用试试:

     

    也就是先获取token.conf文件里的所有配置,然后拿到url里指定的vnc server,比对,如果有,则返回实际ip和端口,也就是其实还是用的ip和端口访问

     

    那我上面改的意思就是只要正则匹配是一个ip+端口的就直接切割后返回,保存重启

     

    /usr/bin/python3 -m websockify -D --web ./noVNC --log-file=ws.log --token-plugin=TokenFile --token-source=token/token.conf --cert ./noVNC/utils/self.pem 6080

     

     

     

    验证,token的值直接输入一个ip+端口,访问:确实可行,我这里用的35009,也就是上面的token.conf配置的node2

     

     

     

    验证

     

    为了确认我连的是不是就是node2而不是node1,我用代码控制打开一个网站看看:

     

     

     

     

    node2的反应:

     

    同时node1并没有任何反应;

     

     

    那就说明,指定的ip和端口访问成功了,而且原有的别名指定的功能也同样存在

     

     

    等会儿,还没完,注意一下,看下launch.sh这个启动脚本“:

     

     

     

     

     

     

    大概意思就是说,启动脚本的时候,这个Q脚本会检测同级目录下有没有websockify文件相关,如果没有的话,就要去github拉取代码,这个是我们脚本第一次启动的时候会作的操作,之后就不会了,而我刚才魔改的哪个token_plugins.py文件就是拉取的websockify仓库里的,也就是说,你如果中途迁移了项目,或者丢失这个文件,或者你不小心把这个websockify名字改了,都会重新去拉取下代码,然后会把刚才改的支持ip+端口访问的覆盖掉,所以你得重新配置下,然后重启才行

     

  • 相关阅读:
    常见的HTTP状态码(HTTP Status Code)说明
    Java基本数据类型和Integer缓存机制
    面向对象的三大基本特征和五大基本原则
    工程变更(ENGINEERING CHANGE)
    反射
    Redis学习手册(开篇)
    MVC,SSM与三层架构的构成及相互关系
    Java框架篇---Mybatis 入门
    java三大框架介绍
    WEB前端JS与UI框架
  • 原文地址:https://www.cnblogs.com/Eeyhan/p/14950796.html
Copyright © 2020-2023  润新知