安裝 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
,也支援dsa
、ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
)舉例
dsa
:1ssh-keygen -t dsa
金鑰長度
一些演算法支援多種金鑰長度,例如 RSA 常見的金鑰長度為1024
、2048
、3072
、4096
bits…可以使用參數
-b
以bit
為單位調整金鑰長度:1ssh-keygen -b 4096
屬名
提供公鑰時通常會附上屬名,例如上述例子中的公鑰採用ssh-keygen
預設屬名格式<user>@<host
,則為user@host
。該屬名可以使用
-C
參數更改:1ssh-keygen -C "Alpaca"