Linux系统如何搭建SSH实现动态密码登录的配置方法?

在Linux系统中搭建SSH动态密码登录,通常指通过集成动态密码(如一次性密码OTP)增强SSH登录安全性,防止密码泄露或暴力破解,以下是详细搭建步骤,以Google Authenticator(基于TOTP算法)为例,实现静态密码+动态密码的双因素认证(2FA)。

linux如何搭建 ssh 动态密码登录

安装必要软件

首先需安装Google Authenticator的PAM(Pluggable Authentication Modules)模块,该模块负责动态密码的验证逻辑,不同Linux发行版的安装命令不同:

发行版 安装命令
Ubuntu/Debian sudo apt update && sudo apt install libpam-google-authenticator
CentOS/RHEL sudo yum install google-authenticatorsudo dnf install google-authenticator

安装完成后,确保系统已安装SSH服务(sudo apt install openssh-serversudo yum install openssh-server),并启动SSH服务(sudo systemctl start sshd,并设置开机自启:sudo systemctl enable sshd)。

为用户配置动态密码

以用户exampleuser为例,执行以下操作:

  1. 切换到目标用户:sudo su - exampleuser
  2. 运行google-authenticator命令,按提示配置
    • 命令会生成一个密钥(Secret Key),并显示二维码(可通过Google Authenticator、FreeOTP等APP扫描绑定)。
    • 提示是否“启用基于时间的一次性密码(TOTP)”,选择y
    • 提示是否“防止重用已使用过的动态密码”,选择y(增强安全性)。
    • 提示是否“为每个用户设置独立的文件路径”,默认即可(通常在~/.google_authenticator)。
    • 提示是否“允许紧急访问码(Recovery Codes)”,选择y并保存8位应急码(用于丢失动态密码时登录)。

配置完成后,用户目录下会生成.google_authenticator文件,包含密钥和验证规则。

linux如何搭建 ssh 动态密码登录

配置PAM模块启用动态密码验证

PAM模块通过配置文件控制认证流程,需修改/etc/pam.d/sshd文件(SSH服务的PAM配置文件):

  1. 备份原配置:sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
  2. 编辑文件:sudo nano /etc/pam.d/sshd
  3. 在文件开头添加以下行(若已存在@include common-auth,需注释掉):
    auth required pam_google_authenticator.so secret=/home/exampleuser/.google_authenticator user=exampleuser
    • secret:指定动态密码密钥文件路径(需根据用户调整,如/root/.google_authenticator则用户为root)。
    • user:指定目标用户名(若需对所有用户生效,可省略user参数,但需确保每个用户都有.google_authenticator文件)。

配置SSH服务支持密码认证

确保SSH服务允许密码认证,并禁用仅密钥认证(若需保留密钥登录,可跳过此步):
编辑/etc/ssh/sshd_config文件:sudo nano /etc/ssh/sshd_config
找到以下配置并修改:

PasswordAuthentication yes  # 启用密码认证(默认可能为no,需改为yes)
ChallengeResponseAuthentication yes  # 启用挑战响应认证(PAM模块依赖此选项)
PubkeyAuthentication yes  # 保留密钥登录(可选,默认为yes)

修改后保存,重启SSH服务:sudo systemctl restart sshd

测试动态密码登录

  1. 在另一台设备上使用SSH客户端连接服务器:ssh exampleuser@服务器IP
  2. 输入静态密码(用户系统密码),提示输入动态密码时,打开手机上的Google Authenticator APP,输入当前6位动态密码。
  3. 若输入正确,则登录成功;若错误,会提示“Authentication failure”。

若应急码未配置且动态密码丢失,可使用应急码登录(输入时需在应急码前加,如#123456)。

linux如何搭建 ssh 动态密码登录

安全优化建议

  1. 禁用root直接登录:编辑/etc/ssh/sshd_config,设置PermitRootLogin no,降低风险。
  2. 限制登录尝试:安装fail2bansudo apt install fail2ban),配置规则防止暴力破解。
  3. 定期更新密钥:建议每3-6个月重新运行google-authenticator生成新密钥,并更新APP绑定。

相关问答FAQs

Q1:忘记动态密码且应急码丢失,无法登录服务器怎么办?
A1:需通过物理接触服务器或使用控制台(如VNC、IDRAC)登录,以root权限修改用户认证方式:

  1. 临时禁用PAM模块:编辑/etc/pam.d/sshd,注释掉添加的pam_google_authenticator.so行(行首加)。
  2. 重启SSH服务:sudo systemctl restart sshd
  3. 登录后重新生成动态密码密钥:sudo su - exampleuser,运行google-authenticator按提示配置。
  4. 恢复PAM模块配置,重启SSH服务。
    注意:此操作仅在紧急情况下使用,恢复后需立即重新配置动态密码。

Q2:如何为多个用户批量配置动态密码登录?
A2:可通过脚本批量生成密钥并配置PAM模块:

  1. 创建用户列表(如users.txt),每行一个用户名。
  2. 批量生成密钥:for user in $(cat users.txt); do sudo su - $user -c "google-authenticator -t -d -f -r 3 -R 30 -w 3"; done
    • 参数说明:-t启用TOTP,-d禁用重用密码,-r 3生成3个应急码,-R 30设置密钥有效期30天,-w 3允许3次登录失败。
  3. 修改PAM配置文件,添加对所有用户的动态密码验证(省略user参数,确保每个用户目录下有.google_authenticator文件)。
  4. 重启SSH服务使配置生效。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32878.html

(0)
酷番叔酷番叔
上一篇 2025年9月30日 03:51
下一篇 2025年9月30日 04:06

相关推荐

  • 你还在纠结吗

    操作前准备:查看当前登录用户在踢出用户前,需确认目标用户及会话信息:who # 显示用户、终端和登录时间w # 显示更详细信息(包括用户正在执行的命令)输出示例:root pts/0 2023-10-01 10:00 (192.168.1.100)user1 pts/1 2023-10-01 11:30 (19……

    2025年7月21日
    5000
  • 如何掌握 lsblk 命令?

    在Linux系统中,查看未挂载的硬盘分区是管理存储设备的基础操作,常用于新硬盘初始化、分区恢复或挂载配置,以下是几种专业可靠的方法,所有命令均需root权限(通过sudo或root用户执行),操作前请务必确认设备标识符,避免误操作导致数据丢失,特点:直观显示设备树形结构,区分已挂载/未挂载分区,lsblk -f……

    2025年6月19日
    5800
  • 如何查看所有网卡名称?

    在Linux系统中,查询网卡的MAC地址(物理地址)是网络配置和故障排查的常见需求,MAC地址是网卡的唯一硬件标识符,由12位十六进制数表示(如 00:1A:2B:3C:4D:5E),常用于网络权限控制、设备识别或DHCP绑定,以下是多种专业、可靠且经过验证的查询方法,适用于所有主流Linux发行版(Ubunt……

    2025年6月20日
    5600
  • Linux如何启用IPv6?

    在Linux系统中启用IPv6(互联网协议第6版)是应对IPv4地址枯竭、提升网络性能的重要操作,尤其对于需要访问IPv6-only服务的环境至关重要,以下是详细的启用步骤,涵盖系统配置、网络接口设置及服务验证等关键环节,检查内核IPv6支持现代Linux发行版默认已内置IPv6内核模块,可通过以下命令确认支持……

    2025年10月8日
    1100
  • 如何登录root账户?

    在Linux系统中,更改root密码是系统管理的基础操作,以下是详细方法,涵盖不同场景(已知当前密码/忘记密码),请根据实际情况选择,操作涉及系统核心权限,务必谨慎执行,前提条件权限要求:方法1-2:需已知当前root密码或拥有sudo权限的用户,方法3-4:需物理接触服务器或虚拟机控制台,风险提示:误操作可能……

    2025年7月23日
    4800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信