DEV Community

YuehBen66
YuehBen66

Posted on • Edited on

與 SSH 同行

學習緣由
在開始做 Side Project 的時候,因為我使用 create-next-app 時,
沒有用成 typescript 版,我的 mentor 幫我處理的時候,
發現現在好像需要用 ssh 才能 push 到 github 上,
然後中間過程半聽半懂的 XD,想說趁機來了解一下~
Enter fullscreen mode Exit fullscreen mode

 

SSH 是什麼?

一個協定(protocol),為 Secure Shell 的縮寫,
讓兩台電腦在網路(Network)上安全的傳輸

因為在網路上傳輸時,資料都以明文(plain text) 的方式遊走,很容易被竊聽(overhearing)或篡改(tampering)

在還未有 SSL 的古早年代,就常常有人利用嗅探攻擊(sniffing attack)來截取使用者密碼和資料並篡改,後續在 1995 年,塔圖·于勒寧(Tatu Ylonen)就開發了 ssh 協定,讓電腦資料傳輸可以更安全的進行

 

SSH 資料傳輸方式

在此協定下,資料傳輸的方式可以用把包裹寄給朋友來說明

SSH data transfer

  1. 今天我想寄一個很機密包裹給朋友,要確保不能被別人拿走

  2. 我先加一個鎖在自己的包裹上,再傳給朋友

  3. 傳給朋友後,他看到我的鎖後,也加了自己的鎖

  4. 我看到朋友的鎖後,將自己的鎖解除,再回傳給朋友

  5. 朋友將鎖解除後,成功拿到包裹

 

這樣一來,我們可以增加傳送過程中的安全性,
即使資料(包裹)在途中被別人截取,也因為被加密的關係無法解讀

但在這之前,我們需要將兩台電腦達成 SSH 連結,
才能進行上述的傳輸

 

如何建立 SSH 連結呢?

SSH 連結採用 Client-Server 模型
此處的 Client 為本機 (local machine),Server 為遠端機 (remote machine)
並用以下的流程,達成 Server 對 Client 的授權 (Authentication)
並成立 SSH 連結

 

SSH Authentication

 

  1. 在本機利用 RSA 的加密方式,產生一組公鑰(Public Key)和私鑰(Private Key),為一對 SSH keys

  2. 將公鑰放在 Server 上

  3. Client 利用終端機等產生一組 ID,範例格式如下:
    ssh username@my_ip_address
    傳給 Server,要求 Server 建立 SSH 連結

  4. Server 會用公鑰加密(encrypt),產生一組隨機的挑戰訊息 (random challenge message)回傳給 Client

  5. Client 會用私鑰將挑戰訊息解密(decrypt)後,回傳給 Server

  6. 如果解密後的挑戰訊息回傳 Server 後相符,則 SSH 連結就成立了

 

以上就是 SSH 的介紹,如果有其他想法也請大家不吝指教~

 
 

參考資源

Top comments (0)