Linux中國

在 Ubuntu 和 Debian 上啟用雙因子身份驗證的三種備選方案

如今,安全比以往更加重要,保護 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](https://authy.com/) 是一個雙重身份驗證服務,與 Google 一樣,它提供基於時間的代碼。然而,Authy 不需要手機,因為它提供桌面和平板客戶端。它們還支持離線身份驗證,不需要 Google 帳戶。

你需要從應用程序商店安裝 Authy 應用程序,或 Authy [下載頁面](https://authy.com/download/)所鏈接的桌面客戶端。

安裝完應用程序後,需要在伺服器上使用 API 密鑰。這個過程需要幾個步驟:

1. 在[這裡](https://www.authy.com/signup)註冊一個賬戶。
2. 向下滾動到 「Authy」 部分。
3. 在帳戶上啟用雙因子認證(2FA)。
4. 回 「Authy」 部分。
5. 為你的伺服器創建一個新的應用程序。
6. 從新應用程序的 「General Settings」 頁面頂部獲取 API 密鑰。你需要 「PRODUCTION API KEY」旁邊的眼睛符號來顯示密鑰。如圖:

![](/data/attachment/album/201811/06/204801eiomcb42ngo2w8cn.png)

在某個安全的地方記下 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


 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: 

作者:[Elliot Cooper](https://bash-prompt.net) 譯者:[cielllll](https://github.com/cielllll) 校對:[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原創編譯,[Linux中國](https://linux.cn/) 榮譽推出

---
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國