目录
在Ubuntu 22.04 LTS上实现SSH密码登录的双因素认证(2FA),可以借助开源程序 libpam-google-authenticator
,并结合微软的Authenticator
应用(该APP可以在手机的应用商店中下载并安装)进行基于时间的一次性密码(TOTP,Time-based One-time Password)认证。以下是指导如何设置:
注意该认证方法无需借助公网环境。
一、安装必要的软件包
- 打开终端。
- 更新软件包列表:
- 安装
libpam-google-authenticator
包:
二、配置每个用户的TOTP
- 以需要启用2FA的用户身份登录系统。
- 运行以下命令来生成一个新的密钥和配置文件:
- 系统会提示你回答一些问题,建议按如下方式回应:
Do you want authentication tokens to be time-based (y/n)
: 输入y
。- 其他提示可以根据需要选择
(y/n)
。
- 生成的二维码会在终端中显示,使用你手机中的
微软Authenticator
APP扫描此二维码(在已验证ID
中点扫描QR码
)。
三、配置SSH以支持PAM
- 编辑SSH配置文件:
- 找到并确保以下行被取消注释并设置为以下内容:
- 确保 PasswordAuthentication 设置为
yes
:
四、配置PAM以使用Google Authenticator
- 编辑PAM配置文件:
- 在文件的顶部添加以下内容:
五、重启SSH服务
- 保存文件后,退出编辑器(比如:在nano中按
CTRL + X
,然后按Y
确认保存)。 - 重启SSH服务以应用更改:
六、测试设置
-
从另一个终端或设备尝试用SSH连接到你的Ubuntu服务器:
-
首先,在提示时输入从
微软Authenticator
APP中获取的TOTP代码(点击Authenticator中
的对应项,查看一次性密码代码。),然后输入账户密码。 -
登录图示:
上图中Verification code
就是TOTP代码,Password是账号本地密码。 -
如果使用虚拟终端登录,需要配置身份验证方法为
交互式(Keyboard Interactive)
七、注意事项
- 确保在启用2FA之前,你拥有本地访问,防止因配置错误而无法通过SSH登录。
- 将TOTP密钥(recovery codes)妥善保管,在TOTP应用失效时可以使用它登录设备(一个code只能用一次),否则将无法再登录设备!