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

相关推荐

  • 你知道吗?90%的人都不知道的真相

    环境准备Linux系统默认自带GCC编译器(GNU Compiler Collection),通过终端验证安装:gcc –version若未安装,使用包管理器安装:Debian/Ubuntu:sudo apt install build-essentialCentOS/RHEL:sudo yum groupi……

    2025年7月17日
    10400
  • linux如何识别u

    Linux中,可通过lsblk查看磁盘信息识别U盘,或用`f

    2025年8月13日
    8700
  • linux如何运行python程序

    Linux中,运行Python程序可通过终端输入python 文件名.py或`python3 文件名.

    2025年8月14日
    8100
  • 如何在Linux系统中安装VNC Server?

    在Linux系统中,VNC(Virtual Network Computing)Server是一种常用的远程图形化管理工具,允许用户通过网络远程访问Linux桌面环境,尤其适合无图形界面的服务器或需要可视化操作的场景,本文将以主流发行版Ubuntu/Debian和CentOS/RHEL为例,详细讲解VNC Se……

    2025年8月24日
    9600
  • Linux运行程序脚本如何兼顾安全与效率?

    运行可执行程序直接运行(需执行权限) chmod +x program_name # 添加执行权限 ./program_name # 执行当前目录下的程序关键点:Linux默认不搜索当前目录(安全机制),必须用 显式指定路径,若程序在系统路径(如 /usr/bin),可直接输入程序名(如 firefox),指定……

    2025年7月30日
    7200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信