继上一次Ubuntu矿机问题之后,vnc也出问题了。原来我以为校网比较干净,就什么安全措施都没做。大家都直接可以vnc远程登录,输个密码就OK了,等于没戴套就上床了(捂脸)
事情回忆:
这次隔了一个多星期,没有截图了只能文字表述。
我们的ubuntu服务器有多个人远程登录工作。都是用的tigervnc。vncserver开个口,client一连接就开搞。最近有人反映vncviewer连不上,一连接就显示'too many authentication failure'。 我就自己试验了一下。结果发现,在我刚创建vncserver process的时候是可以连接的。但是等几分钟再连就会报上面的错。后来google了一下发现是安全问题。
这个上面说因为网络里有自动查找server的恶意脚本,当看到你的server某个端口开着的时候就尝试brutal force进去。vnc自己有防御机制。在发现多次尝试失败以后就自动禁止所有外界尝试了。然后我们自己想用的时候request自然也就被拒绝了。相当于多次尝试开机密码失败,就锁机了。
知道了问题症结,就得想解决办法。一般来说远程连接安全的做法就是ssh。但是如果只是ssh user@地址的话,连进去全是命令行,就没有vnc了。那么怎么才能既用ssh又用vnc呢?一下是我google了一下午之后学到的解决办法。(从零开始看,连ssh机理都不懂。。。)
解决办法,ssh+vnc
不熟悉ssh用作机理的小伙伴这里有youtube视频。
mit网页上找到一哥们的解决方法,用ssh的port forwarding(不清楚原理的小伙伴看这里,这里有视频,讲的很清楚)
他的想法有点绕,我也不知道是不是真的比单单用ssh要安全,但是确实能够用ssh把vnc加密。原理是在建立vnc的时候,用localhost地址来限制Xvnc所接受的来访地址。也就是说,之后server主机的地址才能连接。
$ vncserver :7 -geometry 1280x854 -localhost
这样确实安全了。可是除了服务器大家都连不上啊,那有啥用? 这时候,用ssh远程登录,并且把一个本地的port map到目标地址的vncserver输出口,然后再用vnc client连接本地的那个端口。这就实现了vnc client用本地连接,vnc server只接收本地ip,却能把connect建立起来(好不好放一边,我得承认这哥们很有想法!)
$ ssh -x -e none -L 5902:127.0.0.1:5907 vnc.server.host # vnc.server.host是服务器的ip
(用ubuntu的话,上面这条命令是在client上打的啊,不是去server上建立ssh的。。。)
要知道vnc打开的connection都是59xx。5902就是2号。5907就是7号。上面的命令等于说“先用ssh登录服务器。再用ssh开一个local port-forwarding,把所有收到的5902的信息全都forward到127.0.0.1的5907端口去”。5907就是vncserver :7。因为已经ssh登陆了,所以系统知道127.0.0.1是服务器的localhost,这样就和vncserver接上了。
ssh连上以后,terminal放着不动就行。这是最后再用vncviewer连接localhost:2,也就是服务器的5902。感觉像绕了一个大圈,但是目前没有在遇到vnc报错的问题。 我不知道我说清楚没有,如果不好理解的话看看视频里的动画应该就能明白了。
最好在把22号端口也给改了,让别人不知道你的ssh端口是啥。
多平台应用
ssh用macOS和ubuntu很好连接。用windows的话有一点点麻烦,需要putty来做port forwarding。这里有视频教怎么弄。普通的ssh命令怎么做,和怎么改port号,在这里可以找到。这里有更多的port forwarding的例子,帮助理解。
最后为了方便备注一下,ubuntu上改port号的那个文件是 /etc/ssh/sshd_config
改过port号之后要重启一下ssh才能生效。
sudo /etc/init.d/ssh restart
感谢一下这位mit牛人的notes。
ref:
https://solveoptimized.com/how-to-resolve-prevent-too-many-authentication-failures-with-vnc/
https://www.youtube.com/watch?v=PXi-39elr6Y&t=190s
http://www.mit.edu/~avp/lqcd/ssh-vnc.html
https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding
https://www.youtube.com/watch?v=JKrO5WABdoY
https://www.youtube.com/watch?v=7YNd1tFJfwc
https://www.youtube.com/watch?v=DI3G-TfY1wM
https://www.ssh.com/ssh/tunneling/example
网友评论