在寫 Shell Script 時被 expect 跳脫搞到快瘋掉,還是來 Sign Key 比較快… Orz
不過本來就應該避免把密碼 Hard Code 在程式碼當中啦,當初有確定這份 Script 只有我要用,不會出我電腦,才放心用 Hard Code 的。但現在既然有可能出我電腦,還是用金鑰做認證登錄比較保險。
SSH Key-based 登入驗證
SSH Key-based 登入驗證方式的正式名稱應該叫 — SSH 公開金鑰認證(Public Key Authentication),設定完成後就可以免密碼登入了。
基本上就兩個步驟:
- 產生 SSH 登入用的金鑰
- 將產生的 Pub key 放到伺服器的
authorized_keys
清單中
1. 產生金鑰
先切換到 ~/.ssh
目錄下,通常金鑰都會收集起放在這個目錄下。若該目錄不存在,就自己建一個,並設定正確的權限:
1 |
|
然後以 ssh-keygen
產生金鑰:
1 |
|
在產生金鑰的過程中,會詢問一些問題,如果沒有特殊需求可以全部使用預設值(按 Enter)就好:
1 |
|
第 1 個問題是問你金鑰儲存的位置與檔名,預設檔名是 id_rsa ,不過這實在看不出這把金鑰的用途,所以習慣上我會更改檔名。
第 2 跟 3 個問題則是指定金鑰保護密碼。若有設定密碼的話,之後每次使用這把金鑰時就要輸入密碼,因此請務必牢記密碼。別像我一樣,我有一次設完密碼後,數個月沒登入就忘記密碼了,只好在重新產生一把金鑰惹… (っ╥╯﹏╰╥c)
最後看到 fingerprint 與 randomart ,就代表產生成功了。
1 |
|
2. 將公開金鑰上傳
產生的金鑰有兩把一把是公開金鑰(Public Key)、一把是私密金鑰(Private Key)。
- 公開金鑰(Public Key):這把是對外公開的金鑰,之後把它上傳到伺服器上使用。
-
私密金鑰(Private Key):這把則是放在自己電腦的金鑰,它等同於你的密碼,請務必保護好。此外,私鑰在使用時,權限僅能是
400
、600
或700
,否則會出現下列的錯誤訊息:Permissions for are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
上傳金鑰的方法有幾種,個人偏好第 1 種與第 2 種,因為一條指令就搞定了:
1 |
|
也可以用 ssh-copy-id
,指令最短:
1 |
|
真的不想記指令的話,就把金鑰傳上去,在寫過去 authorized_keys
。不過說真的這條就是把第 1 種上傳方式拆開下而已:
1 |
|
最懶的大概是直接複製貼上!?
1 |
|
3. 停用密碼認證登入
如果公開金鑰認證設定完成後,想關閉密碼登入的方式,可以修改伺服器上的 /etc/ssh/sshd_config
的設定
1 |
|
把 PasswordAuthentication 註解打開並將值改成 no
,另外檢查 PubkeyAuthentication 是否為 yes
,修改完記得重起 sshd 。
1 |
|
是說我有點好奇,如果把 PasswordAuthentication 跟 PubkeyAuthentication 同時設成 no 會出現什麼狀況?但我慫(台語),而且機台在遠端,所以沒敢嘗試,要是搞壞就真的 GG 了 (つ﹏⊂)
參考資料
- Tsung (2005-12-28)。ssh keygen 免輸入密碼。檢自 Tsung’s Blog (2019-06-13)。
- G. T. Wang (2014-05-18)。SSH 公開金鑰認證:不用打密碼登入 Linux 設定教學,安全又方便。檢自 G. T. Wang (2019-06-13)。
- 程序新视界 (2018-01-18)。Linux ssh 重启无效_程序新视界。檢自 CSDN博客 (2021-01-08)。
更新紀錄
最後更新日期:2021-01-12
- 2021-01-12 更新:補上重起 sshd 指令
- 2019-06-13 發布