Ssh

SSH 身份驗證:SSH 密鑰或一次性密碼

  • May 22, 2014

我有一個 Ubuntu 10.04 Linux 伺服器,我通常使用 ssh 密鑰身份驗證 ssh 進入(從我的家用機器)。但是,有時我需要從可能不安全的機器(如網吧、圖書館的公共電腦等)遠端 ssh,而我的密碼可能會在這些機器上被洩露。在這種情況下,我想使用一次性密碼系統,例如OTPW或 Steve Gibson 的Perfect Paper Passwords

如何將我的伺服器配置為首先檢查 ssh 密鑰,然後使用 OTPW 系統進行身份驗證?(我必須創建兩個使用者嗎?)

儘管此方法不檢查 1 種身份驗證方法,但它確實解決了使用 OTP 從不安全/不受信任的機器登錄的問題。

要將 SSH 守護程序配置為偵聽多個埠(一個用於公鑰認證,另一個用於 OTP 認證),只需在 sshd_config 文件中添加另一個埠號,即

Port 22 # For key-based auth
Port 60000 # For OTP-based auth

2-FA 基於Google的兩步驗證技術。要安裝庫和程序:

$ sudo apt-get install libpam-google-authenticator

同時,在您的智能手機上安裝 Google Authenticator 應用程序。安裝後,從終端啟動程序:

$ google-authenticator

這會給你一個條碼、一個秘密和一堆刮碼。保證他們的安全!!!如果您無法使用手機或需要緊急訪問,這些程式碼將是您進入的唯一途徑。不要低估這種備份機制的重要性。從長遠來看,它可能會讓你失望。配置 PAM 模組以使用 Google Authenticator:

$ sudo nano /etc/pam.d/sshd

要禁用密碼登錄,請在@include common-auth 行前面添加一個#。此外,在文件底部添加:

auth required pam_google_authenticator.so

要啟用 OTP 身份驗證:

$ sudo nano /etc/ssh/sshd_config

找到帶有片語的行:ChallengeResponseAuthentication並將其從“否”更改為“是”。

設置PermitRootLogin noPasswordAuthentication no

在文件末尾,使用“match”參數來確定必須使用哪種身份驗證機制才能從該埠訪問機器,例如:

Match LocalPort 22
   PasswordAuthentication no
   AuthenticationMethods publickey
   PubKeyAuthentication yes
​
Match LocalPort 60000
   AuthenticationMethods keyboard-interactive:pam

參數“keyboard-interactive:pam”強制 SSH 守護程序進入 PAM 模組守護程序(在 下配置/etc/pam.d/sshd)並按照那裡指定的方式進行身份驗證(因此還需要通過散列該common-auth行來禁用 PAM 模組的密碼登錄) . 不要忘記重新啟動 SSH 守護程序以使更改生效:

$ sudo /etc/init.d/sshd restart

然後,在不受信任的機器上時,只需 SSH 到埠 60000(或您設置的任何內容)並使用 OTP 進行身份驗證。

使用 OTP 作為備份的公鑰身份驗證(這就是您的意思,對嗎?):

  1. 帶有密碼回退的公鑰驗證是 OpenSSH 的預設行為
  2. 密碼驗證方式最好在 PAM 配置文件中定義

引用自:https://unix.stackexchange.com/questions/27787