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安装Qt的最优方法是什么?

    安装前的准备系统更新打开终端执行:sudo apt update && sudo apt upgrade # Debian/Ubuntusudo dnf update # Fedora安装基础依赖sudo apt install build-essential libgl1-mesa-dev……

    2025年7月24日
    4300
  • linux如何防御dos攻击

    nux防御DOS攻击可通过配置防火墙规则、限制连接速率、启用SYN Cookie及合理设置系统

    2025年8月17日
    2800
  • 如何在Linux下查找文件内容?有哪些实用方法?

    在Linux系统中,查找文件内容是日常运维、开发和数据分析中的高频操作,掌握高效的方法能显著提升工作效率,Linux提供了多种命令和工具,支持按文件名、文件内容、文件类型等不同维度进行查找,本文将详细介绍这些方法及其适用场景,grep命令:文本内容查找的核心工具grep(Global Regular Expre……

    2025年9月25日
    1500
  • Linux中kill进程的正确方法和操作步骤是什么?

    在Linux操作系统中,进程是程序执行的基本单位,当进程出现异常(如卡死、资源泄露、无法正常退出)时,管理员或用户需要手动终止进程以保证系统稳定,本文将详细介绍Linux中终止进程(kill进程)的方法、工具及相关注意事项,查看进程:kill操作的前提在终止进程前,需先明确目标进程的信息(如进程ID、名称、状态……

    2025年8月31日
    3500
  • Linux PBS环境下注销语句的具体编写和使用方法是什么?

    在Linux环境下,PBS(Portable Batch System)作为广泛使用的作业调度系统,其作业注销(取消)功能是用户日常管理任务的重要组成部分,当作业提交后,因需求变更、错误提交或资源冲突等原因,用户需要注销已提交的作业时,可通过PBS提供的核心命令qdel实现,本文将详细说明qdel命令的使用方法……

    2025年9月29日
    1600

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信