SSH Key Public Key Private Key 解說 圖解 公鑰 私鑰 差異 用途
前言
大多數的一般電腦用戶都使用一台桌機或是筆電建立一個個人帳戶並在電腦旁進行操作,但如果是一台伺服器有多個使用者帳戶供多人遠端連線使用,使用者透過網路連線來操控伺服器電腦或是傳遞檔案資料,就必須要考慮到安全性問題,譬如說當連線到server登入使用者帳戶時,輸入的帳號密碼就會有曝露在網路上的風險,會有被駭客竊取帳密的疑慮。
為了提升安全性我們可以想到很多方法來實踐,例如客戶端(Client)網路連線到伺服端(Server),如果客戶端與伺服器都是在同一個辦公室或實驗室,那就可以使用內部網路來連線,降低外網連線被竊取或登入帳號的風險,又或者是採用加密的安全連線方式Secure Shell(SSH)、sftp、scp,而不要使用無安全機制的連線方式telnet、ftp、rcp。
Secure Shell (SSH) 的簡介
SSH是一個加密的網路連線通訊協定,當資料由傳送端電腦傳送到網路時,SSH會自動將資料進行加密,加密後的資料傳送到接受端之後就會進行解密。
SSH是client/server架構組成,SSH Client與SSH Server透過加密的網路連線SSH互相通訊,SSH Server程式由最高權限安裝於伺服器電腦,並允許或拒絕client連線到伺服器電腦。一般用戶使用SSH Client程式安裝在其他非伺服器的電腦上,並發送連線要求到伺服器電腦。
遠端連線的方式
不加密的遠端連線
如果我們不使用SSH加密安全連線方式,你遠端連線登入的帳號與密碼就會曝光在網路上讓其他人竊取,甚至Wireshark封包分析軟體就可以抓到資料。
下圖是使用沒有加密的telnet遠端連線,你的密碼將直接曝露在網路上。
使用Password認證的加密遠端連線
為了不讓帳號密碼或傳送的檔案資料曝露在網路上,我們使用SSH加密安全連線方式,在資料送到網路上之前SSH會自動把資料加密,經過演算法加密後的資料看起來就像亂碼一樣,待加密資料傳送到另一端電腦後再進行解密如下圖所示。當你輸入的帳密加密後送到伺服器認證帳密有效且正確,伺服器就會approve你的連線要求~
使用Key-pairs認證的加密遠端連線
Key-pairs我們可以知道Key鑰匙是成對的,分別是Public Key公鑰與Private Key私鑰,所謂的公鑰就是公開給大家的鑰匙,而私鑰就是保密的鑰匙只有接受資料那方自己一個人擁有私鑰,不能給任何一個人~
它的概念是接受資料的那方或遠端連線的Client端會先在自己本機電腦產生兩把鑰匙,就是公鑰與私鑰,公鑰裡面的代碼提供給傳送資料的那方或遠端連線的Server端,而私鑰則是自己保存好不能給任何一個人,當傳送端要送資料給接收端時,資料會經過公鑰進行加密再丟到網路上,資料已經加密所以公開出來也沒關係,因為只有擁有私鑰的那唯一接收者,才能利用私鑰把加密的資料解密開來。 下圖即呈現其概念。
Password與Key-pairs的認證方式優缺點
Password的認證方式讓使用者易於使用,但是因為使用者還是要輸入帳密,所以還是有存在被竊取或攻擊的風險,加上如果駭客竊取你個人資料,可以從中猜測你會設定的密碼,依然有風險存在,甚至有一篇文章說到2017年最受歡迎的密碼竟然是123456,大部分的人為了方便記憶密碼也不會設定的太過困難~
Key-pairs的認證方式比起Password來的更安全有效,因為它不需要輸入帳密,所以沒有被猜中密碼或竊取密碼的風險,也可以避免使用者不小心輸入錯誤的密碼,甚至它可以自動化的執行script而不用輸入帳密,但它需要更多步驟來設定與管理Key。當然它還是存在被存取的風險,如果存在本機端的私鑰被竊取了,對方就可能模仿成你來存取伺服器。
Ref
- The Secure Shell: The Definitive Guide.
- IBM: What is SSH? A basic description
- Passwords vs. SSH keys – what’s better for authentication?
- 9.3. Public key cryptography
- CSL759: Cryptography and Computer Security
實際範例
透過SSH存取GitHub Repo
- 在要下載GitHub Repo的電腦(接收者)產生SSH Key-pairs。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/caspar/.ssh/id_rsa):
請直接按Enter採用預設值。
~$ ls -l .ssh/
total 16
-rw------- 1 caspar caspar 2610 Oct 10 20:34 id_rsa
-rw-r--r-- 1 caspar caspar 576 Oct 10 20:34 id_rsa.pub
其中id_rsa是私鑰請保存好不要給別人,而id_rsa.pub是公鑰。
- 到GitHub網站點選自己的Profile->設定Setting->SSH and GPG Keys->New SSH Key
把id_rsa.pub的內容複製貼到Key欄位中。
在按下Add SSH Key。
- 到Repo選擇clone->SSH
~$ git clone git@github.com:casparting/casparting.github.io.git
透過SSH遠端連線下指令
待續。。。
結語
利用圖解與實作能快速了解其概念~
留言