快轉到主要內容

SSH 連線以金鑰取代密碼

·1475 字· loading · loading ·
Computer-Science SSH
目錄
每當使用 SSH 連接遠端主機時,都必須輸入密碼,而為了安全性,密碼又需要一定程度的複雜度,長久下來難免感到麻煩...

安裝 Open-SSH 套件
#

首先安裝Open-SSH套件,在 Ubuntu 下可以使用apt安裝:

1sudo apt install -y openssh-client

使用指令"ssh-keygen"產生金鑰檔案
#

為了方便管理金鑰,通常會將金鑰輸出成檔案。

直接輸入如下指令即可按照步驟生成金鑰:

1ssh-keygen

這是 ssh key generate 的縮寫,輸入完畢後系統將提示如下訊息:

1Generating public/private rsa key pair.
2Enter file in which to save the key (/home/user/.ssh/id_rsa):

此時可以輸入金鑰名稱,系統將以指定名稱做為檔名,輸出金鑰檔案於預設路徑/home/user/.ssh/中。
當然你也可以直接指定完整的絕對路徑,或者直接按下Enter鍵以預設路徑及預設檔名儲存(不建議)。

接著系統提示訊息:

1Enter passphrase (empty for no passphrase):
2Enter same passphrase again:

表示為該金鑰設定密碼,通常可以選擇不輸入直接按下Enter

當你看到如下訊息時,表示金鑰已經成功生成:

 1Your identification has been saved in /home/user/.ssh/id_rsa
 2Your public key has been saved in /home/user/.ssh/id_rsa.pub
 3The key fingerprint is:
 4SHA256:Np+/nrEOLNMxAPTp23J+ZFN7t7meV4OTNU/+W9aI7CI user@host
 5The key's randomart image is:
 6+---[RSA 3072]----+
 7|     .o          |
 8|       o .       |
 9|        +        |
10|       . .    .o.|
11|        S o  .++o|
12|       . B =+=.oB|
13|        = Oo+.o.@|
14|        E*.+.+ +=|
15|         ..=O..=+|

找到金鑰檔案
#

如果在上一步驟中,你沒有另外指定其他目錄,通常金鑰檔案會輸出於家目錄底下的隱藏資料夾.ssh中。

舉例方才指定金鑰檔名為id_rsa,則會在~/.ssh/中看到多出兩個檔案,分別是私鑰id_rsa,及公鑰id_rsa.pub
(如果不知道非對稱加密公私鑰,建議可以先觀看我之前的文章「非對稱加密 (Asymmetric Cryptography)」)

私鑰格式如下:

 1-----BEGIN OPENSSH PRIVATE KEY-----
 2b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
 3NhAAAAAwEAAQAAAYEAkUIG1Fyhj7CR4b5h+EtKUO9xZwEfLA1kXzDQ81tZjklkFNPz7jpc
 45IQX8AI089ULPj2APpoxzeCIRx8c1VcU7nZNP1RoqTQCviQfz0uyrdi3BmKcUJKh6qaFmg
 5...
 6...
 7...
 8jBwnEaP5oFQvfGsQaccJPoBIOkZi58uuMpve0oRK+qkjYbOaFpLxVTDK9TnTdQ5wvzwW9a
 928ocVIqXtJbBrQdP1M/hMUdbt3+TjSUHTrW/wQ/5mK0jpQLexVerdD3NzH+qIqizeUPkKe
108XSaIwe070LMUAAAAWYWxwYWNhQERFU0tUT1AtQU9BMjlEVgECAwQF
11-----END OPENSSH PRIVATE KEY-----

公鑰則較短:

1ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCRQgbUXKGPsJHhvmH4S0pQ73FnAR8sDWRfMNDzW1mOSWQU0/PuOlzkhBfwAjTz1Qs+PYA+mjHN4IhHHxzVVxTudk0/VGipNAK+JB/PS7Kt2LcGYpxQkqHqpoWaAasnFZwbXiThWOWgDNwnWBnD5FhOqsbFjpnG7kHgp9HStDnO+0tpvNSkgQERFCyADOsR8LXT/docAaW0t+oWnCQrATBmTQFm8StYxP4WkpsE5sLkF8yqkthMRsptwF6xlIBDg8A9/+j7m9B7K7OziVikjAW6gKo95L6Vtiqm1E3WoecnFYfqhuqo839AMMFgM+B5LBx0cyV1qKHtnKy2xNvtonqf2Bgp5+UBhuLshcQNXyk3hhCQoOuedysmQ39kjqkgXD0v+v2+rsQwBeTPPFckQ0PkBdyC8VbjQZO1y3+FsQ8qtAHhhnv5JJw4QVkFiHNvIzEDd40JHRw1utZ37sxo/jgJnIbyPeNhfLG/dN5yGRT83G9R1GW/XVsQlEP8XEi7TJ0= user@host

上傳公鑰至遠端主機
#

既然是非對稱加密,必然需要提供公鑰給對方,因此需要將公鑰寫入遠端主機中。

而遠端主機放置連線公鑰的檔案預設為~/.ssh/authorized_keys,如果沒有看見該檔案或目錄請自行創建。
(提醒:該檔案之權限極為重要,若設定不當將可能導致他人越權登入,通常僅限定使用者本人有編輯權限)

將方才的公鑰直接寫入該檔案中,若有多個公鑰則換行區分。
而不同的使用者則可以個別設定各自家目錄下的.ssh/authorized_keys檔案。


使用金鑰連線
#

與往常一般,使用 ssh 指令連線,舉例來說用戶名為user,遠端主機為192.168.0.2,則:

1ssh user@192.168.0.2

此時應該可以跳過輸入密碼的步驟登入。

但,也時常發生 ssh 未能自動偵測金鑰的狀況,此時便可以使用-i參數手動指定金鑰檔案位置:

1# 記得是指定"私鑰",而非公鑰檔案
2ssh -i ~/.ssh/id_rsa user@192.168.0.2

更方便的連線,寫入 config 中
#

ssh 提供方便的設定可以讓連線指令更簡短,同樣以用戶名user及遠端主機192.168.0.2為例。
在本地端的~/.ssh中,可以自行創建檔案config,並設定如下資訊:

1Host myHost
2Hostname 192.168.0.2
3User user
4IdentityFile ~/.ssh/id_rsa

簡單說明一下這四個欄位的意思:

欄位簡述
Host該設定之名稱,將用於連線指令
Hostname遠端主機地址,可以是 IP 或網域
User欲用於該連線的使用者名稱
IdentityFile使用者驗證金鑰檔案位置

接著便可以非常方便的輸入如下指令直接連線:

1ssh myHost

更多自訂參數
#

  • 演算法

    當然 ssh 支援產生其他格式的金鑰,可以使用參數-t指定演算法名稱。
    (除了預設的rsa,也支援dsaecdsaecdsa-sked25519ed25519-sk

    舉例dsa

    1ssh-keygen -t dsa
    
  • 金鑰長度
    一些演算法支援多種金鑰長度,例如 RSA 常見的金鑰長度為1024204830724096 bits…

    可以使用參數-bbit為單位調整金鑰長度:

    1ssh-keygen -b 4096
    
  • 屬名
    提供公鑰時通常會附上屬名,例如上述例子中的公鑰採用ssh-keygen預設屬名格式<user>@<host,則為user@host

    該屬名可以使用-C參數更改:

    1ssh-keygen -C "Alpaca"
    
Alpaca
作者
Alpaca
No one can stop my feet.

相關文章

"Tmux" 指令,建立多個終端 Sessions,登出也能保留背景運作
·2398 字· loading · loading
Computer-Science Tmux SSH

在伺服器建立多個程序時,該如何有效率的管理及切換每個程序的終端界面呢?Tmux 不僅能做到這點,還能在使用者登出後,使程序於背景繼續運作。

"Screen" Command 讓程式在背景執行,並隨意切換,即便登出也不會中斷!
·939 字· loading · loading
Computer-Science SSH
Simply setting up a Proxy Server with SSH
·344 字· loading · loading
Computer-Science SSH

Did you know that SSH can make your host as a proxy server?

How to change password of Mariadb?
·63 字· loading · loading
Computer-Science Mariadb
移動 WSL 的儲存空間到其他硬碟
·1041 字· loading · loading
Computer-Science WSL
Windows 的 WSL 佔用了太多系統空間,本文將介紹如何將其移動至自訂的硬碟位置。
架設暗網 - Tor Hidden Service
·1127 字· loading · loading
Computer-Science Tor
本文將說明如何架設 Tor 暗網,將你的服務隱匿在 Tor 當中。