設定 Linux 使用 SSH Key-based 登入驗證方式 === ###### tags: `Linux` ## SSH Key-based 兩個步驟: 產生 SSH 登入用的金鑰 將產生的 Pub key 放到伺服器的 authorized_keys 清單中 ### 1. 產生金鑰 先切換到 ~/.ssh 目錄下,通常金鑰都會收集起放在這個目錄下。若該目錄不存在,就自己建一個,並設定正確的權限: ```permission= $ mkdir ~/.ssh $ chmod 700 ~/.ssh ``` 然後以 ssh-keygen 產生金鑰: ```keygen= $ ssh-keygen ``` 在產生金鑰的過程中,會詢問一些問題,如果沒有特殊需求可以全部使用預設值(按 Enter)就好: ```Q1= 1. Enter file in which to save the key (/home/username/.ssh/id_rsa): /home/username/.ssh/tn_key ``` 第 1 個問題是問你金鑰儲存的位置與檔名,預設檔名是 id_rsa ,不過這實在看不出這把金鑰的用途,所以習慣上我會更改檔名。 ```Q2Q3= 2. Enter passphrase (empty for no passphrase): 3. Enter same passphrase again: ``` 第 2 與第 3 個問題則是指定金鑰保護密碼。若有設定密碼的話,之後每次使用這把金鑰時就要輸入密碼,因此請務必牢記密碼。忘記密碼就只能重新產生金鑰了,所以別給自己找麻煩 :) 最後看到 fingerprint 與 randomart ,就代表產生成功了。 ```f= Your identification has been saved in /home/username/.ssh/tn_key. Your public key has been saved in /home/username/.ssh/tn_key.pub. The key fingerprint is: ..... The key's randomart image is: +---[RSA 2048]----+ | | | | ... | | | | +----[SHA256]-----+ ``` ### 2. 將公開金鑰上傳 產生的金鑰會有兩把一把是公開金鑰(Public Key)、一把是私密金鑰(Private Key)。 公開金鑰(Public Key):這把是對外公開的金鑰,之後把它上傳到伺服器上使用。 私密金鑰(Private Key):這把則是放在自己電腦的金鑰,它等同於你的密碼,請務必保護好。此外,私鑰在使用時,權限僅能是 400、 600 或 700,否則會出現下列的錯誤訊息: ``` Permissions for {{filename}} are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. ``` 上傳金鑰的方法有幾種,個人偏好第 1 種與第 2 種,因為一條指令就搞定了: ```first= $ ssh user@host 'mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys' < /home/username/.ssh/tn_key.pub ``` 也可以用 ssh-copy-id ,指令最短: ```second= $ ssh-copy-id -i ~/.ssh/tn_key.pub user@host ``` 真的不想記指令的話,就把金鑰傳上去,在寫過去 authorized_keys 。不過說真的這條就是把第 1 種上傳方式拆開下而已: ```third= $ scp ~/.ssh/tn_key.pub user@host:~/.ssh/ $ ssh user@host $ cat .ssh/tn_key.pub >> .ssh/authorized_keys ``` ### 3. 停用密碼認證登入 如果公開金鑰認證設定完成後,想關閉密碼登入的方式,可以修改伺服器上的 /etc/ssh/sshd_config 的設定 ```change= # Change to no to disable tunnelled clear text passwords PubkeyAuthentication yes - # PasswordAuthentication yes + PasswordAuthentication no 把 PasswordAuthentication 註解打開並將值改成 no,另外檢查 PubkeyAuthentication 是否為 yes,修改完記得重起 sshd 。 ``` ```restartsshd= $ systemctl restart sshd or $ service ssh restart ``` ## 失敗可能原因 ### 1、許可權問題 .ssh目錄,以及/home/當前使用者 需要700權限,參考以下操作調整 sudo chmod 700 ~/.ssh sudo chmod 700 /home/當前使用者 .ssh目錄下的authorized_keys檔案需要600或644許可權,參考以下操作調整 ``` chmod 600 ~/.ssh/authorized_keys ``` ### 2、StrictModes問題 編輯 sudo vi /etc/ssh/sshd_config 找到 ``` #StrictModes yes ``` 改成 ``` StrictModes no ``` 如果還不行,可以用ssh -vvv 目標機器ip 查看詳情,根據輸出內容具體問題具體分析了 ## Reference 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)。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up