仅在外部地址上进行双因素 SSH 身份验证

仅在外部地址上进行双因素 SSH 身份验证

我有一台 Ubuntu 服务器,它既有私有的内部 IP,也有面向公众的 IP。我想在公共端为 SSH 设置双因素身份验证。这可能吗?我原本打算使用 Google Authenticator,但我也愿意接受其他想法。

答案1

是的,你可以用这个来做pam_access.so。这个食谱取自Google Authenticator 的 wiki

一个有用的 PAM 配方是允许在连接源自某些来源时跳过双因素身份验证。PAM 已经支持此功能。例如,pam_access 模块可用于针对本地子网检查来源:

# skip one-time password if logging in from the local network
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth       required     pam_google_authenticator.so

在这种情况下,access-local.conf 看起来像:

# only allow from local IP range
+ : ALL : 10.0.0.0/24
+ : ALL : LOCAL
- : ALL : ALL

因此,从 10.0.0.0/24 进行的登录尝试不需要双因素身份验证。

答案2

我的要求非常相似,但更具体地说,我想要 1)从外部拥有公钥和 googleAuth 以及 2)从内部拥有公钥或密码(以防我丢失所有公钥,则使用密码):

在 /etc/ssh/sshd_config 中:

AuthenticationMethods publickey,keyboard-interactive
Match address 192.168.2.0/24
    PasswordAuthentication yes
    AuthenticationMethods "password" "publickey"
Match all

/etc/pam.d/sshd:

# Google Authenticator
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth sufficient pam_google_authenticator.so

# Standard Un*x authentication.
auth [success=ignore default=4] pam_access.so accessfile=/etc/security/access-local.conf
@include common-auth

/etc/security/access-local.conf

+ : ALL : 192.168.2.0/24
- : ALL : ALL

除了之前的回答之外,当从外部访问时,我必须跳过 /etc/pam.d/common-auth 中的 4 条规则,我还将 google auth 配置为 adequate 而不是 required。我在 Ubuntu 20.04 上这样做了,但这个解决方案应该很通用

相关内容