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

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

linux如何解除免密登录

解除免密登录的核心方法

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

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

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

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

    cd ~/.ssh
    ls -la  # 查看文件,确认存在authorized_keys
  • 编辑并删除目标公钥:
    使用vi/nano等编辑器打开authorized_keys文件,找到需要解除的公钥行(通常以ssh-rsa、ssh-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_config中PubkeyAuthentication no,重启SSH服务
重置本地SSH密钥 本地私钥泄露,需更换密钥对 本地+远程服务器 本地ssh-keygen生成新密钥,ssh-copy-id上传新公钥
临时强制密码登录 测试或紧急场景,临时关闭免密登录 本地机器 连接时加-o PreferredAuthentications=password或修改本地~/.ssh/config

注意事项

  1. 权限问题:~/.ssh目录权限必须为700,authorized_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系统如何进入编译环境?详细步骤与命令有哪些?

    在Linux系统中,编译环境是进行软件开发和系统维护的基础,它提供了将源代码转换为可执行程序所需的工具链(如编译器、链接器、构建工具等),默认情况下,大多数Linux发行版不会预装完整的编译环境,用户需手动配置,本文将详细介绍如何进入并配置Linux编译环境,涵盖工具检查、安装、环境变量配置及验证等关键步骤,检……

    2025年10月6日
    23000
  • Linux密钥认证解除终极指南

    解除SSH密钥登录(改用密码登录)若需临时绕过SSH密钥认证(如密钥丢失),需修改服务端配置:编辑SSH配置文件 sudo nano /etc/ssh/sshd_config修改以下参数 PasswordAuthentication yes # 启用密码登录PubkeyAuthentication no # 禁……

    2025年8月7日
    22300
  • linux如何搭建c语言环境变量

    Linux 中,可以通过编辑 /etc/environment 或用户目录下的 `.

    2025年8月13日
    20800
  • Linux用户组修改如何安全操作?

    修改用户组的基础命令usermod 命令(修改用户的主组或附加组)修改用户的主组(Primary Group)主组是用户创建文件时的默认所属组,命令格式:sudo usermod -g <新主组名> <用户名>示例:将用户 alice 的主组改为 developerssudo userm……

    2025年7月10日
    20900
  • linux如何检测u盘启动

    Linux中,可通过lsblk或fdisk -l查看磁盘信息,识别

    2025年8月17日
    20400

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信