VNC Viewer无法连接到远程主机上的VNC Server

问题如下:

笔记本(IP:10.100.)上装了VNC Viewer,台机上装了VNC Server,原本笔记本连接无线网,可以通过VNC远程连接到办公网的台机的桌面,自从台机重装了系统后,重新安装了VNC Server,就连不上了,连过去的时候报错 The connection was refused by the computer,见下图:

VNC Viewer无法连接到远程主机上的VNC Server

排查问题的过程:

1、首先一看提示连接被拒绝,网络应该是通了,只是数据包被拒绝了,感觉应该是被防火墙什么的安全策略阻挡了,首先检查了自己主机的防火墙,从来不会在Windows自带的防火墙上配置阻断规则的,只检查了有没有开放VNC Server使用的5900端口,果然已经添加了,因为VNC Server也没报错,而且安装的时候已经添加了例外;然后猜想是不是安全管理员新增了安全策略,阻断了通过无线网络访问办公网的VNC Server的权限,然后发现同事通过无线使用VNC远程桌面是正常的,排除了这个可能。

2、网络没问题,但在笔记本上telnet台机的5900端口,确实不通,在台机上抓包也没收到,那么怀疑可能是软件问题,检查了VNC Server的授权正常,设置也没什么问题,不管了,果断使用功能重装大法,重装了笔记本的VNC Viewer和台机的VNC Server,发现还是没什么卵用。

3、接着是一波关键测试,排除一下软件的问题,用我笔记本的VNC viewer连接同事台机上的VNC Server,发现可以连接,说明笔记本的VNC Viewer没问题;用同事笔记本的VNC连接我主机上的VNC Server,发现也可以连接,说明我主机上VNC Server也么有问题。

WTF?是时候冷静下来思考一波了。。。

那么问题就回到这个关键的节点:重装台机系统,这个前后发生了什么?

终于找到了忽略的关键:VNC客户端首次与VNC服务器建立连接时会保存服务器发来的公钥指纹,之后与同一台服务器(这个同一台是用IP地址来标识的)建立连接时,默认使用已保存的指纹进行验证。

重装之前,笔记本使用VNC Viewer连接过台机,就保存了那个时候台机VNC Server发来的指纹。

然后台机重装系统后,也重装了VNC Server,其公钥指纹也发生了变化。

但是客户端还是默认使用旧的指纹去与跟服务器握手,然额服务器已经不认识它了,就说你是谁啊,反手就是一瓜子。

另一方面客户端保存的服务器公钥指纹是写在注册表里的,所以后来即便重装了客户端的VNC Viewer,其旧的指纹还是在,所以它还是屡教不改,用旧的信物去握手,又被踢回来了。

所以解决方法就来了:

1、打开笔记本上的注册表,Win+R打开运行框,输入regedit打开注册表编辑器,找到VNC Viewer保存服务器指纹的表项:

计算机\HKEY_CURRENT_USER\Software\RealVNC\vncviewer\KnownHosts。(这个是网上搜的)

2、然后将已保存的VNC Server服务器(这里即台机10.100.100.103)的两个旧的指纹数据右键删除即可。

VNC Viewer无法连接到远程主机上的VNC Server

3、删除之后需要重启笔记本,修改的注册表才会生效。

4、重启之后,世界和平~

接收保存新的公钥指纹,输入VNC Server的验证密码,成功连接远程桌面。

VNC Viewer无法连接到远程主机上的VNC Server

VNC Viewer无法连接到远程主机上的VNC Server

VNC Viewer无法连接到远程主机上的VNC Server

还是要冷静下来,慢慢思考才行~