在CentOS / RHEL服務器上設置SSH兩因素身份驗證(2FA)

本教程將向您展示如何使用著名的Google Authenticator在CentOS / RHEL服務器上設置SSH兩因素驗證。 它將大大提高CentOS / RHEL服務器上SSH服務的安全性。

兩因素身份驗證如何工作

通常,您只需要輸入密碼或使用SSH密鑰即可登錄到遠程CentOS / RHEL服務器。 兩因素身份驗證(2FA)要求您輸入兩條信息才能登錄,因此,您還需要輸入基於時間的一次性密碼才能登錄SSH服務器。 使用IETF標準的TOTP算法計算一次密碼。 如今,許多網站和服務(Facebook,Google,Twitter等)為用戶提供2FA保護其帳戶安全,同時也為您的SSH服務器啟用2FA是個好主意。

本教程將向您展示如何設置

  • 使用2FA進行密碼驗證
  • 2FA的公鑰認證

注意:本文中將使用的開源服務器軟件稱為 google-authenticator,它是從EPEL存儲庫安裝的。 Google公司不以任何形式參與任何身份驗證過程。 服務器軟件和移動應用程序不需要網絡訪問。

步驟1:在CentOS / RHEL服務器上安裝和配置Google Authenticator

登錄到CentOS / RHEL服務器並運行以下命令,以從EPEL(企業Linux的額外軟件包)存儲庫安裝Google Authenticator。 qrencode 用於在命令行上生成QR碼。

sudo dnf install -y epel-release

sudo dnf install -y google-authenticator qrencode qrencode-libs

然後運行 google-authenticator 命令以在 ~/.ssh/ 目錄。

google-authenticator -s ~/.ssh/google_authenticator

當被問到“您是否希望身份驗證令牌基於時間?” 回答 ÿ

然後,您將在手機上看到需要使用TOTP應用程序掃描的QR碼。

SSH-2FA-centos-rhel

我推薦兩個應用程序:

  • Google身份驗證器 是最著名的TOTP移動應用。 您可以通過手機上的Google Play或Apple應用商店進行安裝。
  • Google身份驗證器 移動應用不是開源的。 如果您不信任Google,則可以使用FreeOTP,這是由Red Hat開發的開源TOTP移動應用程序。

使用手機上的Google Authenticator或FreeOTP掃描QR碼。 請注意,您需要放大終端窗口以掃描完整的QR碼。

QR碼代表密鑰,只有您的SSH服務器和TOTP移動應用知道該密鑰。 掃描QR碼後,您將在手機上看到一個六位數的一次性密碼。 默認情況下,它每30秒更改一次。 您需要將此一次性密碼輸入終端。

ssh谷歌身份驗證器redhat centos

現在,在終端窗口中,您應該看到 緊急臨時代碼。 將信息保存到安全的地方非常重要,以防手機丟失。

ssh-emergency-scratch-code-rhel-centos

然後您可以輸入 ÿ 回答所有剩餘的問題。 這將更新您的Google Authenticator配置文件,禁用同一身份驗證令牌的多次使用,增加時間範圍並啟用速率限制以防止強行登錄嘗試。

設置ssh 2fa rhel

步驟2:將SSH守護程序配置為使用Google Authenticator

  • 使用2FA進行密碼驗證
  • 2FA的公鑰認證

使用2FA進行密碼驗證

如果您不使用SSH密鑰,請按照以下說明進行操作。

打開SSH服務器配置文件。

sudo nano /etc/ssh/sshd_config

在文件中找到以下兩個參數,並確保將它們都設置為

UsePAM yes

ChallengeResponseAuthentication yes

PAM 代表可插入身份驗證模塊。 它提供了一種簡便的方法,可以將不同的身份驗證方法插入Linux系統。 要使用SSH啟用Google Authenticator,必須啟用PAM和質詢響應身份驗證。

如果要允許root用戶使用2FA,請找到 PermitRootLogin 參數並將其值設置為 yes。 它不可能是 PermitRootLogin no 要麼 PermitRootLogin prohibit-password

PermitRootLogin yes

保存並關閉文件。 然後重新啟動SSH守護程序,以使更改生效。

sudo systemctl restart sshd

現在,為SSH守護程序編輯PAM規則文件。

sudo nano /etc/pam.d/sshd

要在SSH中啟用2FA,請添加以下兩行。

#two-factor authentication via Google Authenticator
auth     required     pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

通過Google Authenticator RHEL進行的SSH兩因素身份驗證

保存並關閉文件。 從現在開始,SSH守護程序將要求您輸入用戶密碼和驗證碼(由Google Authenticator生成的一次性密碼)。 以下屏幕快照顯示了從Ubuntu桌面到CentOS Linux服務器的SSH登錄會話。

SSH驗證碼

2FA的公鑰認證

如果您使用SSH密鑰登錄SSH服務器,請按照以下說明進行操作。

打開SSH服務器配置文件。

sudo nano /etc/ssh/sshd_config

在文件中找到以下兩個參數,並確保將它們都設置為

UsePAM yes

ChallengeResponseAuthentication yes

PAM 代表可插入身份驗證模塊。 它提供了一種簡便的方法,可以將不同的身份驗證方法插入Linux系統。 要使用SSH啟用Google Authenticator,必須啟用PAM和質詢響應身份驗證。

如果要允許root用戶使用2FA,請找到 PermitRootLogin 參數並將其值設置為 yes。 它不可能是 PermitRootLogin no 要麼 PermitRootLogin prohibit-password

PermitRootLogin yes

接下來,在此文件的末尾添加以下行。 這告訴SSH守護程序用戶必須同時通過公共密鑰身份驗證和質詢-響應身份驗證。

AuthenticationMethods publickey,keyboard-interactive

保存並關閉文件。 然後重新啟動SSH守護程序,以使更改生效。

sudo systemctl restart sshd

現在,為SSH守護程序編輯PAM規則文件。

sudo nano /etc/pam.d/sshd

要在SSH中啟用2FA,請添加以下兩行。

#two-factor authentication via Google Authenticator
auth     required     pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

同時注釋掉以下行(在開頭添加#)以禁用密碼身份驗證。

auth substack password-auth

使用2FA RHEL進行公鑰認證

保存並關閉文件。 從現在開始,您需要使用SSH密鑰和Google Authenticator驗證碼登錄。

筆記

  • CentOS / RHEL服務器上的每個用戶都需要運行 google-authenticator -s ~/.ssh/google_authenticator 命令並掃描QR碼以使用兩因素身份驗證。 如果用戶未設置並嘗試登錄,則錯誤消息“權限被拒絕(鍵盤交互)將會顯示。
  • 緊急暫存代碼是您的備用代碼。 如果您丟失了手機,則可以輸入五個緊急暫存代碼之一而不是一次性密碼來完成兩步驗證。 這些代碼僅供一次性使用。
  • 如果要更改密鑰,只需登錄服務器並運行 google-authenticator -s ~/.ssh/google_authenticator 再次命令以更新 ~/.ssh/google_authenticator 文件。

如何在CentOS / RHEL服務器上禁用SSH兩因素身份驗證

編輯SSH守護程序的PAM規則文件。

sudo nano /etc/pam.d/sshd

注釋掉以下行。

auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator

保存並關閉文件。

包起來

我希望本教程可以幫助您在CentOS / RHEL服務器上設置SSH兩因素身份驗證。 與往常一樣,如果您發現這篇文章很有用,請訂閱我們的免費新聞通訊以獲取更多有用的教程。 保重🙂

Sidebar