Linux 的 SSH (OpenSSH) 想要使用 Google 的兩階段認證來確保登入安全, 要如何設定?
- 註1: 登入時, 除了自己的密碼外, 另外需要輸入每分鐘會改變的驗證碼 (若有 Key 就不需要)
- 註2: 不知道兩階段認證是什麼, 可以參考此篇文章: 如何啟用 Google 兩階段驗證密碼 與 問題解決
Linux SSH 加上 Google 兩階段認證服務檢核
- 官方套件: google-authenticator - Two-step verification
- Linux 需要設定的 PAM Module: PamModuleInstructions - google-authenticator - PAM module instructions
兩階段認證 App 要先安裝
- iOS / iPhone: Google Authenticator on the App Store on iTunes
- Android: Google Authenticator - Google Play Android 應用程式
Linux 啟用/設定 兩階段認證 登入步驟
兩階段認證的設定下述分成 Server 設定 和 User 設定兩部份 (User 設定部份, 每個人、換手機時會用到)
Server 設定部份步驟
- sudo apt-get install libpam-google-authenticator # 會有 google-authenticator 的程式讓使用者產生所需 QR Code)
- sudo vim /etc/pam.d/sshd # 設定登入 PAM 檢查, 於檔案最後面加上下述
auth required pam_google_authenticator.so - sudo vim /etc/ssh/sshd_config # no -> yes
ChallengeResponseAuthentication yes - sudo /etc/init.d/ssh restart
User 設定部份步驟
- 執行下述前, 建議先進入 screen 或 tmux (QR Code 太大張的話, 要往上捲用), 下述設定會於自己目錄下存成一個設定檔: ~/.google_authenticator
- $ google-authenticator
Do you want authentication tokens to be time-based (y/n) y https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/xxx%3Fsecret%3DMKK123456
- 有很大的 QR Code 的圖, 接下來打開手機的 Google Authenticator APP. (若沒有看到圖, 或者遠端幫別人做的, 只需上傳上面網址給他, 讓他依照下述步驟掃圖即可)
- Google Authenticator App 右上角有個"筆"的符號
- 然後下方有 "+"
- 選 "掃描條碼"
- 掃描那張大的 QR Code 就可以了
- 下述這些資料請自己抄起來(登入不進去、手機沒電等, 可以臨時使用)
Your new secret key is: AAABBCC1234567AA Your verification code is 123456 Your emergency scratch codes are: 12345688 23456832 23892387 27893789 93827941
- 再下來的所有問題都回答 y 即可:
Do you want me to update your "/home/user/.google_authenticator" file (y/n) y
Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n) y
If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) y
- ssh your.server.name # 測試
Password: 輸入原本的密碼 Verification code: 輸入 Authenticator key (手機上的那個數字)
- 到此就設定完成囉~
FAQ
- 有產生過 Key 和 沒有 Key 的差異? (scp.. 其它程式自動話要使用)
- 若有 key 的一樣直接進入, 沒有 key 的要輸入兩階段才可以進入
- 新使用者, 都還沒辦法登入去操作 google-authenticator 等等的, 會發生什麼事? 要如何解決?
- 若沒有產生 google-authenticator 的帳戶, 需要別人幫忙產生(寄 url) 或幫忙產生 key, 不然會一直出現密碼(輸入正確也無法登入), 完全不會出現 Verification code 可以輸入.
- 解法1: 請可以登入的人, 切換成他的帳號(sudo su - user2), 幫他執行 google-authenticator, 把 QR code 那段網址丟給他, 讓他掃就可以進入. (註:此解法需注意這網址中間不會被人盜取,以確保安全性問題)
- 解法2: 請他產生好 Key, 然後請別人幫他把 Key 放入, 先用 Key 登入後, 再來設定兩階段認證
相關網頁
- Configuring OpenSSH with OATH and public keys (2 factor authentication) | insecure.ws
- Use Google Authenticator For Two-Factor SSH Authentication in Linux | scottlinux.com
- SFTP file transfer using Filezilla (Mac/Windows/Linux) - Filezilla 也有支援 Google oAuth SSH, Login type 選 Interactive 即可.
Hi
請問我可以加這篇的連結在我的網站上嗎?
我想記錄一下我實作上的心得
謝謝
BRs, K.
Yes,請取用~ 🙂
那個 QR CODE 的連結要如何產生?我在安裝的過程裡沒有看到過。
QR Code 在設定完成時,就會自動秀出來
我已經裝好這個套件並順利運作了,不過我忘記備份這個檔案了
如果我想要備份這個QR code,可以從哪裡叫出這些金鑰資訊呢 ?
重新再產生一組新的吧~