当前位置:

首页 > 系统应用 > Linux系统配置SSH密钥登录后禁用密码登录 安全加固

Linux系统配置SSH密钥登录后禁用密码登录 安全加固

在Linux服务器安全加固中,禁用SSH密码登录、强制使用密钥认证,是公认的有效手段。但这一步操作存在一个致命风险:如果密钥登录尚未完全生效就贸然关闭密码通道,你将直接把自己锁在服务器门外。这绝非危言耸听,而是无数运维同行用血泪换来的教训。 因此,整个流程的核心原则是:必须在确认密钥登录已稳定、绝对

在Linux服务器安全加固中,禁用SSH密码登录、强制使用密钥认证,是公认的有效手段。但这一步操作存在一个致命风险:如果密钥登录尚未完全生效就贸然关闭密码通道,你将直接把自己锁在服务器门外。这绝非危言耸听,而是无数运维同行用血泪换来的教训。

Linux系统配置SSH密钥登录后禁用密码登录 安全加固

因此,整个流程的核心原则是:必须在确认密钥登录已稳定、绝对可靠的前提下,才能动手禁用密码登录。下面,我们就来拆解这个过程中的每一个关键环节和隐蔽陷阱。

确认密钥登录已真正生效

很多人执行完 ssh-copy-id 命令后,就以为大功告成。实际上,权限设置不当、配置文件遗漏等问题,常常导致SSH连接“看似成功”,实则悄悄回退到了密码认证。这种假象是后续操作的最大隐患。

  • 新开终端测试:最直接的验证方法是,打开一个新的终端窗口,直接执行 ssh user@host。整个过程如果没有任何密码提示,并且能瞬间登录成功,这才算初步过关。
  • 强制跳过密钥测试:为了验证密码通道是否真的被关闭,可以故意禁用密钥认证进行测试:ssh -o PubkeyAuthentication=no user@host。此时,服务器应该立即返回类似 No supported authentication methods a vailable 的错误,彻底拒绝连接。
  • 检查服务器端权限:这是最容易被忽略的细节。务必登录服务器检查:
    • ~/.ssh/authorized_keys 文件的权限必须设置为 600
    • ~/.ssh 目录的权限必须设置为 700
    如果权限设置过于宽松(例如755),OpenSSH出于安全考虑会直接忽略这个授权文件,导致密钥登录失败。
  • 确认客户端私钥状态:检查你本地使用的私钥文件是否设置了密码短语。如果私钥本身有密码,那么每次连接时仍然需要输入,这很容易让人误以为“密码登录还在工作”,从而做出错误判断。

修改sshd_config的关键三行

仅仅修改 PasswordAuthentication 这一项是不够的。OpenSSH的认证机制是一个链条,其他相关配置如果保持开启,可能会让密码登录“死灰复燃”。

  • 必须同步关闭的配置项
    • PasswordAuthentication no (核心项)
    • ChallengeResponseAuthentication no (挑战应答认证,另一种密码交互方式)
    • UsePAM no (这一点尤其重要。如果系统没有专门为SSH配置PAM策略,开启PAM反而可能绕过前面的限制,重新启用密码验证。)
  • 显式启用密钥认证:添加或确保 PubkeyAuthentication yes 是开启状态。在一些较旧的系统或精简版镜像中,这个选项可能默认是注释掉的,不能想当然。
  • 禁用空密码登录:设置 PermitEmptyPasswords no,防止某些账户因密码为空而被意外利用。
  • 修改后的语法检查:配置文件修改完成后,千万不要直接重启服务。务必先执行 sudo sshd -t 命令进行语法测试。如果没有任何输出,表示配置语法正确;如果有任何报错,必须根据提示修复配置后再进行下一步。

重启前保留一个“逃生会话”

这是整个流程中成本最低、但价值最高的保险措施。一旦重启后的SSH服务配置错误,你将失去所有远程连接方式,只能通过物理控制台或云服务商的VNC进行修复,过程会非常麻烦。

  • 操作原则:绝对不要在当前唯一的SSH会话中执行重启命令。保持这个会话窗口完全不动,作为你的“逃生舱”。
  • 正确操作:打开一个新的终端,使用已经验证成功的密钥登录方式,连接到服务器。在这个新会话中执行 sudo systemctl restart sshd 命令。
  • 重启后立即验证:服务重启后,立刻在新会话中重复之前的测试:
    • 执行 ssh user@host,应该依然能免密登录。
    • 执行 ssh -o PubkeyAuthentication=no user@host,应该被明确拒绝。
  • 故障排查:如果测试失败,无法连接,立即回到你保留的那个原始“逃生会话”窗口。通过查看SSH服务日志来定位问题:sudo journalctl -u sshd -n 50 --no-pager。常见错误包括配置文件某行拼写错误、权限问题等。
  • 服务器额外注意:如果你修改过SSH默认端口(22),重启后还需要同步检查云平台的安全组或防火墙规则,是否放行了新的端口。否则,连接会在TCP层面就失败,与认证配置无关。

后续验证与防退化

安全加固不是一次性的操作,而是一种需要持续维护的状态。系统升级、自动化运维工具执行、甚至某些软件包的安装,都可能悄无声息地覆盖或重置你的 sshd_config 文件。

  • 定期检查运行时配置:不要只看配置文件,要检查SSH服务实际加载的配置。命令 sudo sshd -T | grep -E "^(password|pubkey|permit|usepam)" 可以列出所有运行时生效的相关参数,这比阅读静态文件更可靠。
  • 监控认证日志:定期查看系统认证日志,检查是否还有密码尝试的记录:grep "password" /var/log/auth.log | tail -10。如果仍有大量密码尝试日志,说明某个配置“口子”依然敞开着。
  • 自动化配置管理:如果使用Ansible、Puppet等自动化工具管理服务器配置,务必确保你的配置模板是明确覆盖上述关键行,而不是在文件末尾追加。追加可能导致与文件中原有的旧配置产生冲突或共存。
  • 注意特殊环境:对于通过容器镜像快速部署、或CI/CD流程中动态创建的临时服务器,要特别小心。这些环境常常会跳过部署SSH公钥的步骤,如果直接应用禁用密码的配置,会导致整个自动化流程中断。

最后,再强调一个最隐蔽的陷阱:你以为通过 sshd_config 关掉了密码登录,但如果 UsePAM 被设为 yes,并且系统PAM配置中包含了 pam_pwquality 等密码管理模块,那么密码验证可能会在PAM层面“复活”。因此,在大多数追求纯粹密钥登录的场景下,将 UsePAM no 视为必要项,而非可选项,是更为稳妥的做法。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
系统应用 Linux
相关文章 更多
Windows安装Docker教程:启用WSL2并运行第一个容器验证
Windows安装Docker教程:启用WSL2并运行第一个容器验证

本文提供Windows环境下安装Docker Desktop的完整步骤,重点在于启用WSL2后端及验证容器运行。通过PowerShell执行docker version确认客户端与服务端连通,并运行hello-world测试镜像完成基础环境搭建。

CentOS 7在VMware中的完整安装与验证指南
CentOS 7在VMware中的完整安装与验证指南

本文详细讲解如何在VMware Workstation中从零开始安装CentOS 7虚拟机。内容涵盖ISO镜像准备、典型配置创建、硬件参数分配(磁盘与内存)、安装器操作及首次启动后的版本与网络验证。通过规范化的步骤指引,帮助读者快速搭建稳定可用的Linux学习环境,并解决常见的启动与网络故障。

Kubernetes入门:用kubectl创建并查看第一个Deployment
Kubernetes入门:用kubectl创建并查看第一个Deployment

本文指导使用 kubectl 创建最小 nginx Deployment,并通过 READY、UP-TO-DATE、AVAILABLE 与 Pod Running 状态进行验收。重点区分“命令已接收”和“工作负载已可用”,并在状态异常时利用 Pod 详情与事件输出定位镜像、调度或启动问题。

Mac外接鼠标滚动方向设置:关闭自然滚动与触控板分离方案
Mac外接鼠标滚动方向设置:关闭自然滚动与触控板分离方案

Mac外接鼠标滚动方向与触控板不一致时,可通过系统设置中的“自然滚动”开关调整。本文详解如何进入鼠标设置页面、切换滚动逻辑,并提供鼠标与触控板方向分离的第三方工具方案,解决滚轮手感不适及多设备冲突问题。

Ubuntu命令行入门:打开终端并验证文件目录操作
Ubuntu命令行入门:打开终端并验证文件目录操作

本教程指导Ubuntu新手打开终端,通过pwd、ls、cd、mkdir和touch命令完成基础文件目录操作。适用于桌面版、虚拟机及WSL环境,提供从查看路径到创建测试文件的完整验证步骤,帮助读者建立命令行操作的安全意识与正确习惯。

Nginx Windows版安装、启动与验证完整指南
Nginx Windows版安装、启动与验证完整指南

本教程针对Windows环境,详解Nginx稳定版(如1.24.0)的下载、解压、启动及验证流程。核心步骤包括:下载官方压缩包至英文目录,使用start nginx启动,通过localhost访问默认页面,并利用tasklist和nginx -t命令确认进程状态及配置语法。涵盖端口冲突排查、配置重载及停止服务的标准操作,适用于本地开发环境搭建与基础运维验证。

VMware虚拟机共享文件夹配置与读写验证教程
VMware虚拟机共享文件夹配置与读写验证教程

本文提供VMware虚拟机共享文件夹的配置与验证方法。核心步骤包括:确保VMware Tools已安装,在虚拟机设置中启用共享文件夹并添加主机目录,最后通过读写测试文件确认传输正常。适用于Windows及Linux虚拟机,旨在解决主机与虚拟机间文件交换问题。

大数据分析师Linux环境教程:安装Hadoop并验证版本与进程状态
大数据分析师Linux环境教程:安装Hadoop并验证版本与进程状态

本教程指导大数据分析师在Linux环境中安装Hadoop,通过配置环境变量、验证版本及启动服务,确保Java和Hadoop命令可用。最终利用jps命令检查NameNode等核心进程状态,为后续学习HDFS和Spark打下基础。

在VMware中安装Ubuntu并验证启动的完整步骤
在VMware中安装Ubuntu并验证启动的完整步骤

本文提供在VMware中安装Ubuntu并验证启动的完整流程。适用于首次练习Linux或搭建开发环境的用户。按步骤完成虚拟机创建、ISO挂载、硬件分配与安装后,可通过终端命令确认版本、内核与网络状态,确保系统可正常使用。

Win10专业版U盘安装教程:制作启动盘与完成安装
Win10专业版U盘安装教程:制作启动盘与完成安装

本文提供从准备镜像到完成安装的完整链路。需准备8GB以上U盘与官方镜像,制作启动盘会清空U盘数据。通过F12等快捷键或BIOS设置从U盘启动,安装时选择专业版并谨慎分区。完成后在“设置—系统—关于”验证版本,并检查激活与驱动状态。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。