Linux如何解除SSH免密登录配置?

Linux系统中,免密登录通常基于SSH密钥认证实现,通过将本地公钥添加到远程服务器的~/.ssh/authorized_keys文件中,实现无需输入密码即可登录,若需要解除免密登录(如安全需求变更、密钥泄露或仅需临时禁用),可通过以下方法操作,具体场景和步骤如下:

linux如何解除免密登录

解除免密登录的核心方法

免密登录的核心是SSH密钥认证的启用与配置,解除操作需围绕“移除公钥”“禁用密钥认证”或“重置密钥”展开,具体分为以下四种常见场景:

移除特定用户的免密登录权限(精准控制)

适用场景:仅禁止某个特定用户(如旧设备或离职用户)的免密登录,保留其他用户的免密权限。
操作对象:远程服务器(目标机器)。
关键步骤

  • 登录服务器并定位公钥文件
    通过SSH或直接登录远程服务器,进入用户家目录的.ssh文件夹(默认路径~/.ssh/),该文件存储所有允许免密登录的公钥。

    cd ~/.ssh
    ls -la  # 查看文件,确认存在authorized_keys
  • 编辑并删除目标公钥
    使用vi/nano等编辑器打开authorized_keys文件,找到需要解除的公钥行(通常以ssh-rsassh-ed25519等开头,后跟密钥内容和用户标识),直接删除该行。

    vi authorized_keys
    # 保存后退出(vi中按:wq)
  • 检查文件权限
    SSH服务对authorized_keys的权限敏感,需确保权限为600(仅所有者可读写),否则可能认证失败:

    chmod 600 authorized_keys
    chmod 700 ~/.ssh  # 确保.ssh目录权限为700

完全禁用远程服务器的免密登录(全局禁用)

适用场景:服务器需强制所有用户使用密码登录(如高安全环境),彻底关闭密钥认证通道。
操作对象:远程服务器(需root权限)。
关键步骤

linux如何解除免密登录

  • 修改SSH服务配置文件
    编辑/etc/ssh/sshd_config(SSH服务的全局配置文件),找到PubkeyAuthentication配置项,将其值改为no(默认为yes):

    vi /etc/ssh/sshd_config
    # 定位到PubkeyAuthentication yes,改为no
  • 禁用密码登录(可选)
    若需同时禁用密码登录(仅保留密钥认证,但实际已禁用密钥),可设置PasswordAuthentication no,但若禁用密钥后未开启密码登录,可能导致无法登录,需谨慎操作。
  • 重启SSH服务使配置生效
    修改配置后需重启SSH服务,新配置才会生效:

    systemctl restart sshd  # CentOS/RHEL系统
    systemctl restart ssh   # Ubuntu/Debian系统

重置本地SSH密钥(本地密钥泄露场景)

适用场景:本地私钥(如~/.ssh/id_rsa)可能泄露(如设备丢失、私钥文件被拷贝),需重新生成密钥对并更新服务器,避免旧密钥继续免密登录。
操作对象:本地机器 + 远程服务器。
关键步骤

  • 本地生成新密钥对
    执行ssh-keygen命令生成新的密钥对(建议使用ed25519算法,安全性更高),覆盖旧密钥或指定新文件名(如id_rsa_new):

    ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_new -C "new_key_comment"
    # 按提示输入密码(可选,建议设置,避免私钥无密码直接使用)
  • 上传新公钥到服务器
    使用ssh-copy-id命令将新公钥(id_rsa_new.pub)添加到服务器的authorized_keys中:

    ssh-copy-id -i ~/.ssh/id_rsa_new.pub user@remote_server
    # 输入用户密码完成上传
  • 清理旧密钥(可选)
    若旧密钥无需保留,可删除本地旧私钥和服务器上的旧公钥(参考方法1)。

临时禁用免密登录(测试或紧急场景)

适用场景:临时测试密码登录是否正常,或紧急情况下临时关闭免密登录,无需修改配置文件。
操作对象:本地机器。
关键步骤

  • 使用SSH参数强制密码认证
    连接远程服务器时,通过-o参数指定认证方式为密码,忽略本地密钥:

    ssh -o PreferredAuthentications=password user@remote_server
  • 修改本地SSH配置文件(临时)
    在本地~/.ssh/config文件中针对特定主机添加PasswordAuthentication yes,临时覆盖全局配置:

    vi ~/.ssh/config
    # 添加以下内容(示例)
    Host remote_server
        HostName remote_server_ip
        User username
        PasswordAuthentication yes

不同解除方法的对比总结

为方便快速选择,以下表格汇总上述方法的适用场景和操作要点:

linux如何解除免密登录

方法名称 适用场景 操作对象 关键命令/步骤
移除特定用户公钥 精准禁止某个用户免密登录 远程服务器 编辑~/.ssh/authorized_keys删除目标行,检查权限(chmod 600)
完全禁用服务器密钥认证 全局关闭所有免密登录 远程服务器(需root) 修改/etc/ssh/sshd_configPubkeyAuthentication no,重启SSH服务
重置本地SSH密钥 本地私钥泄露,需更换密钥对 本地+远程服务器 本地ssh-keygen生成新密钥,ssh-copy-id上传新公钥
临时强制密码登录 测试或紧急场景,临时关闭免密登录 本地机器 连接时加-o PreferredAuthentications=password或修改本地~/.ssh/config

注意事项

  1. 权限问题~/.ssh目录权限必须为700authorized_keys权限必须为600,否则SSH服务会拒绝加载密钥,导致免密登录失败(即使公钥存在)。
  2. 配置备份:修改/etc/ssh/sshd_config前建议备份原文件(cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),避免误操作导致SSH服务无法启动。
  3. 多用户环境:若服务器有多个用户,需逐用户检查~/.ssh/authorized_keys,避免遗漏其他用户的免密配置。

相关问答FAQs

Q1:解除免密登录后,为什么仍然可以免密登录?
A:可能原因包括:① 未重启SSH服务(修改sshd_config后需执行systemctl restart sshd);② authorized_keys文件权限错误(非600);③ 本地SSH客户端仍缓存了密钥(可尝试ssh -l user remote_server -o IdentitiesOnly=yes强制使用指定密钥);④ 服务器存在其他密钥认证文件(如authorized_keys2,旧版SSH可能使用)。

Q2:如何验证免密登录是否已成功解除?
A:可通过以下方式验证:① 尝试免密登录,若提示Permission denied (publickey,password),说明密钥认证已禁用;② 使用ssh -v user@remote_server-v显示详细日志),查看认证过程是否包含publickey,若日志中仅出现password认证,则免密登录已解除;③ 在服务器上检查/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS),查看登录认证记录,确认无publickey成功的日志。

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

(0)
酷番叔酷番叔
上一篇 2025年9月22日 21:17
下一篇 2025年9月22日 21:28

相关推荐

  • Linux逐行读取文件的最佳方法?

    核心方法详解while 循环 + read 命令while IFS= read -r line; do echo "处理内容: $line"done < "文件名.txt"关键参数IFS=:防止首尾空格被截断-r:禁止反斜杠转义(如\n不会被解释为换行)适用场景:中……

    2025年6月22日
    7700
  • Linux中如何执行SQL脚本文件?

    在Linux环境下执行SQL脚本文件是数据库管理和开发中的常见操作,无论是初始化数据库结构、批量导入数据还是执行备份恢复,都离不开这一技能,整个过程需要明确数据库类型、脚本格式及执行权限,以下是具体操作方法和注意事项,执行前的准备工作确认数据库环境首先需要明确当前系统安装的数据库类型(如MySQL、Postgr……

    2025年9月25日
    4800
  • 如何系统学习嵌入式Linux?新手入门路径与实战方法指南

    学习嵌入式Linux是一个系统性的过程,需要从基础知识入手,逐步深入到系统移植、驱动开发和项目实践,夯实计算机基础是关键,包括C语言编程(指针、结构体、内存管理)、数据结构与算法、计算机组成原理(ARM架构、总线、中断)以及操作系统基础(进程、内存管理、文件系统),这些知识是理解嵌入式Linux底层逻辑的前提……

    2025年8月28日
    5900
  • 手机电脑最新版本怎么查?

    查看版本可确认当前软件或系统信息,通常通过运行特定命令(如命令行输入版本查询指令)或在程序设置菜单中查找”选项实现,此操作为升级、故障排查及兼容性验证提供基础依据。

    2025年7月5日
    7300
  • 在Linux中如何调试C文件目录?

    在Linux环境下调试C语言文件目录中的程序,是开发过程中确保代码正确性的关键环节,这一过程涉及工具选择、编译配置、断点设置及问题定位等多个步骤,合理使用调试工具能显著提升开发效率,以下是详细操作流程和注意事项,调试前准备工作调试前需确保系统安装了必要的编译和调试工具,Linux通常默认安装GCC编译器,若未安……

    2025年10月4日
    2800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信