VScode中通過Remote Development插件實現了遠程開發功能,但是每次連接服務器每次都需要輸入密碼,比較繁瑣,在實驗室換了新設備,在新主機上安裝好VScode又要重新設置一下,所以去了解了一下SSH協議
SSH安全協議
參考鏈接:https://www.cnblogs.com/olio1993/p/10960306.html
根據VScode官網上的簡介我們可以知道,遠程開發是基於SSH安全協議進行的,平時通過Xshell等工具連接服務器時也沒深入了解,根據自己查閱的資料,將自己的理解記錄如下:
- ssh全稱Source Shell,是一種建立在應用層上的遠程管理協議標准,也被稱為安全外殼協議,主要用於遠程會話和其他網絡服務提供安全性的協議。其本質是進行加密的shell,代替通過明文傳輸的Telent協議,具有更高的安全性
- 利用ssh可以有效防止遠程管理過程中的信息泄露問題,並能夠防止DNS欺騙和IP欺騙
- 提高傳輸效率,傳輸過程中對數據進行壓縮
- ssh安全協議中結合了兩種加密方式:對稱加密和非對稱加密
對稱加密和非對稱加密
對稱加密方式,數據加密和解密使用同一個密鑰,用於解密的密鑰一旦丟失造成安全問題
非對成加密方式,完成加解密操作,需要兩個密鑰同時參與,一般地,”公鑰加密,則用私鑰解密“,”私鑰加密,則用公鑰加密“,相對於對稱加密,非對稱加密的安全性提升了很多,同時效率源源低於對稱加密
典型的非對稱加密RSA
參考鏈接:https://www.cnblogs.com/Alenliu/p/5040062.html
1、消息發送方A在本地構建密鑰對,公鑰和私鑰
2、消息發送方A將產生的公鑰發送消息給消息接收方B
3、B向A發送數據時,通過公鑰進行加密,A收到數據后通過私鑰進行解密
4、A向B發送數據時,通過私鑰僅對數據進行加密,B接收到數據后通過公鑰進行解密
存在的隱患:A發送的公鑰是用的明文的方式,如果公鑰在數據傳輸過程中泄露,A通過私鑰加密的數據可能被解密。
更安全的模型:消息發送方和消息接收方都各構建一套密鑰對,並分別將各自的公鑰以明文的方式發送給對方,在傳遞消息時,A通過B的公鑰對數據加密,B接收消息方式通過自己的私鑰解密,反過來,B通過A的公鑰對數據加密,A接收消息通過自己的私鑰進行解密
上圖來自:https://www.cnblogs.com/spfrank/p/14393079.html
進一步的提升:這種方式仍然存在數據傳遞被模擬的隱患,我們可以通過數字簽名技術僅從進一步提升,但相應地,效率會大大降低
SSH加密原理
ssh協議結合了RSA非對稱加密算法和對稱加密算法,只在建立安全通道前使用非對稱加密,而后使用對稱加密算法使用一個密鑰用於加密解密,從而提高了傳輸的效率。
流程說明:
- 首先服務端通過非對稱加密算法,產生一個公鑰和私鑰
- 當客戶端請求連接服務端的端口,服務端將公鑰以明文的形式發送給客戶端
- 客戶端獲得公鑰后,產生一個密鑰口令(256隨機數字組成)並用公鑰加密發給服務端
- 服務端用私鑰進行解密,獲取到客戶端的密鑰口令
- 在這以后,客戶端和服務端的信息傳遞都使用這個密鑰口令進行對稱加密
分析:
這樣的設計雖然和客戶端服務端都構建一套密鑰對的加密方式來說,在安全性上有所下降,因為上面所述通過客戶端口令進行加密過程中,口令可能會被破解,數據被竊聽,但是考慮到該口令是由256個隨機數字組成,有10^256種組合方式,破解難度比較大,所以相對來說該設計在提高傳輸效率過程中相對還是比較安全。
設置SSH免密登錄
- 在本地主機生成公鑰和私鑰對
ssh-keygen
上圖中箭頭所指的密鑰鎖碼可以留空,實現無密碼登錄。
- 在git中使用如下命令,將公鑰添加到遠程服務器中
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port userName@IP
其中port是端口號,如果使用的默認端口22則無需設置,userName是用戶名,IP是遠程主機的IP號
- 重新打開VSCode,遠程連接服務器不用輸入密碼