在 Ubuntu 和 Debian 上啟用雙因子身份驗證的三種備選方案
如何為你的 SSH 伺服器安裝三種不同的雙因子身份驗證方案。
如今,安全比以往更加重要,保護 SSH 伺服器是作為系統管理員可以做的最為重要的事情之一。傳統地,這意味著禁用密碼身份驗證而改用 SSH 金鑰。無疑這是你首先應該做的,但這並不意味著 SSH 無法變得更加安全。
雙因子身份驗證就是指需要兩種身份驗證才能登入。可以是密碼和 SSH 金鑰,也可以是金鑰和第三方服務,比如 Google。這意味著單個驗證方法的洩露不會危及伺服器。
以下指南是為 SSH 啟用雙因子驗證的三種方式。
當你修改 SSH 配置時,總是要確保有一個連線到伺服器的第二終端。第二終端意味著你可以修復你在 SSH 配置中犯的任何錯誤。開啟的終端將一直保持,即便 SSH 服務重啟。
SSH 金鑰和密碼
SSH 支援對登入要求不止一個身份驗證方法。
在 /etc/sh/sshd_config
中的 SSH 伺服器配置檔案中的 AuthenticationMethods
選項中設定了身份驗證方法。
當在 /etc/ssh/sshd_config
中新增下一行時,SSH 需要提交一個 SSH 金鑰,然後提示輸入密碼:
AuthenticationMethods "publickey,password"
如果你想要根據使用情況設定這些方法,那麼請使用以下附加配置:
Match User jsmith
AuthenticationMethods "publickey,password"
當你已經編輯或儲存了新的 sshd_config
檔案,你應該透過執行以下程式來確保你沒有犯任何錯誤:
sshd -t
任何導致 SSH 不能啟動的語法或其他錯誤都將在這裡標記出來。當 ssh-t
執行時沒有錯誤,使用 systemctl
重新啟動 SSH:
systemctl restart sshd
現在,你可以使用新終端登入,以核實你會被提示輸入密碼並需要 SSH 金鑰。如果你用 ssh-v
,例如:
ssh -v jsmith@example.com
你將可以看到登入的每一步。
注意,如果你確實將密碼設定成必需的身份驗證方法,你要確保將 PasswordAuthentication
選項設定成 yes
。
使用 Google Authenticator 的 SSH
Google 在 Google 自己的產品上使用的雙因子身份驗證系統可以整合到你的 SSH 伺服器中。如果你已經使用了Google Authenticator,那麼此方法將非常方便。
雖然 libpam-google-authenticator 是由 Google 編寫的,但它是開源的。此外,Google Authenticator 是由 Google 編寫的,但並不需要 Google 帳戶才能工作。多虧了 Sitaram Chamarty 的貢獻。
如果你還沒有在手機上安裝和配置 Google Authenticator,請參閱 這裡的說明。
首先,我們需要在伺服器上安裝 Google Authenticatior 安裝包。以下命令將更新你的系統並安裝所需的軟體包:
apt-get update
apt-get upgrade
apt-get install libpam-google-authenticator
現在,我們需要在你的手機上使用 Google Authenticatior APP 註冊伺服器。這是透過首先執行我們剛剛安裝的程式完成的:
google-authenticator
執行這個程式時,會問到幾個問題。你應該以適合你的設定的方式回答,然而,最安全的選項是對每個問題回答 y
。如果以後需要更改這些選項,您可以簡單地重新執行 google-authenticator
並選擇不同的選項。
當你執行 google-authenticator
時,一個二維碼會被列印到終端上,有些程式碼看起來像這樣:
Your new secret key is: VMFY27TYDFRDNKFY
Your verification code is 259652
Your emergency scratch codes are:
96915246
70222983
31822707
25181286
28919992
你應該將所有這些程式碼記錄到一個像密碼管理器一樣安全的位置。“scratch codes” 是單一的使用程式碼,即使你的手機不可用,它總是允許你訪問。
要將伺服器註冊到 Authenticator APP 中,只需開啟應用程式並點選右下角的紅色加號即可。然後選擇掃描條碼選項,掃描列印到終端的二維碼。你的伺服器和應用程式現在連線。
回到伺服器上,我們現在需要編輯用於 SSH 的 PAM (可插入身份驗證模組),以便它使用我們剛剛安裝的身份驗證器安裝包。PAM 是獨立系統,負責 Linux 伺服器上的大多數身份驗證。
需要修改的 SSH PAM 檔案位於 /etc/pam.d/sshd
,用以下命令編輯:
nano /etc/pam.d/sshd
在檔案頂部新增以下行:
auth required pam_google_authenticator.so
此外,我們還需要註釋掉一行,這樣 PAM 就不會提示輸入密碼。改變這行:
# Standard Un*x authentication.
@include common-auth
為如下:
# Standard Un*x authentication.
# @include common-auth
```
接下來,我們需要編輯 SSH 伺服器配置檔案:
nano /etc/ssh/sshd_config “`
改變這一行:
ChallengeResponseAuthentication no
為:
ChallengeResponseAuthentication yes
接下來,新增以下程式碼行來啟用兩個身份驗證方案:SSH 金鑰和谷歌認證器(鍵盤互動):
AuthenticationMethods "publickey,keyboard-interactive"
在重新載入 SSH 伺服器之前,最好檢查一下在配置中沒有出現任何錯誤。執行以下命令:
sshd -t
如果沒有標識出任何錯誤,用新的配置過載 SSH:
systemctl reload sshd.service
現在一切都應該開始工作了。現在,當你登入到你的伺服器時,你將需要使用 SSH 金鑰,並且當你被提示輸入:
Verification code:
開啟 Authenticator APP 並輸入為您的伺服器顯示的 6 位程式碼。
Authy
Authy 是一個雙重身份驗證服務,與 Google 一樣,它提供基於時間的程式碼。然而,Authy 不需要手機,因為它提供桌面和平板客戶端。它們還支援離線身份驗證,不需要 Google 帳戶。
你需要從應用程式商店安裝 Authy 應用程式,或 Authy 下載頁面所連結的桌面客戶端。
安裝完應用程式後,需要在伺服器上使用 API 金鑰。這個過程需要幾個步驟:
- 在這裡註冊一個賬戶。
- 向下滾動到 “Authy” 部分。
- 在帳戶上啟用雙因子認證(2FA)。
- 回 “Authy” 部分。
- 為你的伺服器建立一個新的應用程式。
- 從新應用程式的 “General Settings” 頁面頂部獲取 API 金鑰。你需要 “PRODUCTION API KEY”旁邊的眼睛符號來顯示金鑰。如圖:
在某個安全的地方記下 API 金鑰。
現在,回到伺服器,以 root 身份執行以下命令:
curl -O 'https://raw.githubusercontent.com/authy/authy-ssh/master/authy-ssh'
bash authy-ssh install /usr/local/bin
當提示時輸入 API 鍵。如果輸入錯誤,你始終可以編輯 /usr/local/bin/authy-ssh
再新增一次。
Authy 現已安裝。但是,在為使用者啟用它之前,它不會開始工作。啟用 Authy 的命令有以下形式:
/usr/local/bin/authy-ssh enable <system-user> <your-email> <your-phone-country-code> <your-phone-number>
root 登入的一些示例細節:
/usr/local/bin/authy-ssh enable root john@example.com 44 20822536476
如果一切順利,你會看到:
User was registered
現在可以透過執行以下命令來測試 Authy:
authy-ssh test
最後,過載 SSH 實現新的配置:
systemctl reload sshd.service
Authy 現在正在工作,SSH 需要它才能登入。
現在,當你登入時,你將看到以下提示:
Authy Token (type 'sms' to request a SMS token):
你可以輸入手機或桌面客戶端的 Authy APP 上的程式碼。或者你可以輸入 sms
, Authy 會給你傳送一條帶有登入碼的簡訊。
可以透過執行以下命令解除安裝 Authy:
/usr/local/bin/authy-ssh uninstall
via: https://bash-prompt.net/guides/ssh-2fa/
作者:Elliot Cooper 譯者:cielllll 校對:wxy
相關文章
- 在 Fedora 上為 SSH 設定雙因子驗證
- Linux中為SSH啟用雙因素身份驗證Linux
- 《數字身份驗證指南》草案中提議禁用基於簡訊的雙因子認證
- asp.core 同時相容JWT身份驗證和Cookies 身份驗證兩種模式JWTCookie模式
- 在 Debian 和 Ubuntu 上安裝 Cutefish 可愛魚Ubuntu
- 幾種常見的身份認證方案和介面測試中的應用
- 零知識證明在隱私保護和身份驗證中的應用
- asp.net core 3.1多種身份驗證方案,cookie和jwt混合認證授權ASP.NETCookieJWT
- 在Linux上使用的10種雲備份方案Linux
- GitHub 現在支援安全金鑰和生物識別選項進行身份驗證Github
- Debian 12採用 Ubuntu三重緩衝Ubuntu
- win10 的windows身份驗證怎麼開啟_win10怎麼進行身份驗證Win10Windows
- Kerberos 身份驗證在 ChunJun 中的落地實踐ROS
- springboot-rsocketbasicauth-example:在RSocket和Spring Boot中使用身份驗證的示例Spring Boot
- 如何列出 Ubuntu 和 Debian 上已安裝的軟體包Ubuntu
- vagrant啟動身份驗證失敗的解決方式
- 身份證驗證工具類
- 華為雲 OneAccess 應用身份管理服務,認證授權雙保駕,身份管理的選擇關鍵
- Debian和Ubuntu有什麼不同嗎?該如何選擇?Ubuntu
- 驗證代理IP的三種方法
- 密碼雙保險!谷歌即將預設開啟雙因子登入認證密碼谷歌
- Debian上啟用Apache2服務Apache
- 身份證如何查驗真偽?C#身份證二要素、三要素介面整合C#
- 作業系統(AIX)雙因素身份認證解決方案作業系統AI
- 防火牆(360天堤)雙因素身份認證解決方案防火牆
- 多因子認證是什麼意思?與雙因子認證有什麼區別?
- 【PTA】查驗身份證
- PHP 驗證身份證號碼PHP
- C++身份證號驗證C++
- 免費實名認證介面python語言-身份核驗-身份證二、三要素Python
- Shiro身份驗證丟擲AuthenticationException異常,解決方案Exception
- Welcome to YARP - 5.身份驗證和授權
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- js正則驗證身份證號JS
- python - 驗證身份證合法性Python
- 中國身份證號驗證庫
- 區塊鏈在網路身份證中的應用區塊鏈
- 使用 JWT 身份驗證保護你的 Spring Boot 應用JWTSpring Boot