繼上一次Ubuntu礦機問題之后,vnc也出問題了。原來我以為校網(wǎng)比較干凈,就什么安全措施都沒做。大家都直接可以vnc遠程登錄,輸個密碼就OK了,等于沒戴套就上床了(捂臉)
事情回憶:
這次隔了一個多星期,沒有截圖了只能文字表述。
我們的ubuntu服務(wù)器有多個人遠程登錄工作。都是用的tigervnc。vncserver開個口,client一連接就開搞。最近有人反映vncviewer連不上,一連接就顯示'too many authentication failure'。? 我就自己試驗了一下。結(jié)果發(fā)現(xiàn),在我剛創(chuàng)建vncserver process的時候是可以連接的。但是等幾分鐘再連就會報上面的錯。后來google了一下發(fā)現(xiàn)是安全問題。
這個上面說因為網(wǎng)絡(luò)里有自動查找server的惡意腳本,當(dāng)看到你的server某個端口開著的時候就嘗試brutal force進去。vnc自己有防御機制。在發(fā)現(xiàn)多次嘗試失敗以后就自動禁止所有外界嘗試了。然后我們自己想用的時候request自然也就被拒絕了。相當(dāng)于多次嘗試開機密碼失敗,就鎖機了。
知道了問題癥結(jié),就得想解決辦法。一般來說遠程連接安全的做法就是ssh。但是如果只是ssh user@地址的話,連進去全是命令行,就沒有vnc了。那么怎么才能既用ssh又用vnc呢?一下是我google了一下午之后學(xué)到的解決辦法。(從零開始看,連ssh機理都不懂。。。)
解決辦法,ssh+vnc
不熟悉ssh用作機理的小伙伴這里有youtube視頻。
mit網(wǎng)頁上找到一哥們的解決方法,用ssh的port forwarding(不清楚原理的小伙伴看這里,這里有視頻,講的很清楚)
他的想法有點繞,我也不知道是不是真的比單單用ssh要安全,但是確實能夠用ssh把vnc加密。原理是在建立vnc的時候,用localhost地址來限制Xvnc所接受的來訪地址。也就是說,之后server主機的地址才能連接。
$ vncserver :7 -geometry 1280x854 -localhost
這樣確實安全了??墒浅朔?wù)器大家都連不上啊,那有啥用? 這時候,用ssh遠程登錄,并且把一個本地的port map到目標(biāo)地址的vncserver輸出口,然后再用vnc client連接本地的那個端口。這就實現(xiàn)了vnc client用本地連接,vnc server只接收本地ip,卻能把connect建立起來(好不好放一邊,我得承認這哥們很有想法!)
$ ssh -x -e none -L 5902:127.0.0.1:5907 vnc.server.host? ? # vnc.server.host是服務(wù)器的ip
(用ubuntu的話,上面這條命令是在client上打的啊,不是去server上建立ssh的。。。)
要知道vnc打開的connection都是59xx。5902就是2號。5907就是7號。上面的命令等于說“先用ssh登錄服務(wù)器。再用ssh開一個local port-forwarding,把所有收到的5902的信息全都forward到127.0.0.1的5907端口去”。5907就是vncserver :7。因為已經(jīng)ssh登陸了,所以系統(tǒng)知道127.0.0.1是服務(wù)器的localhost,這樣就和vncserver接上了。
ssh連上以后,terminal放著不動就行。這是最后再用vncviewer連接localhost:2,也就是服務(wù)器的5902。感覺像繞了一個大圈,但是目前沒有在遇到vnc報錯的問題。? 我不知道我說清楚沒有,如果不好理解的話看看視頻里的動畫應(yīng)該就能明白了。
最好在把22號端口也給改了,讓別人不知道你的ssh端口是啥。
多平臺應(yīng)用
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