Lazy loaded image
服务器改密钥登录
Words 2953Read Time 8 min
2026-3-10
2026-3-10
type
Post
status
Published
date
Mar 10, 2026
slug
summary
密钥
tags
实用教程
category
linux
icon
password

前言

本教材适用于已开启密码登录的Debian服务器,旨在指导用户将登录方式从“密码登录”安全切换为“密钥登录”。密钥登录采用非对称加密技术,相较于密码登录,能有效抵御暴力破解、弱口令攻击,大幅提升服务器登录安全性。
核心原则:先配置并测试密钥登录,确认可用后再禁用密码登录,避免因配置失误导致服务器无法登录。全程操作零风险,新手可放心跟随步骤执行。

第一章 核心概念说明

1.1 密钥对组成

密钥登录依赖一对相互匹配的密钥(非对称加密),两者分工明确、不可混淆:
  • 私钥(id_ed25519):存储在本地电脑,是登录服务器的“钥匙”,核心机密,绝对不能泄露、外传或丢失。
  • 公钥(id_ed25519.pub):存储在服务器,是“锁”,可公开传输,仅用于验证私钥的合法性。
登录原理:本地电脑使用私钥发起登录请求,服务器用公钥验证私钥是否匹配,匹配成功则允许登录,无需输入密码。

1.2 适用环境

  • 服务器:Debian系统(全版本通用,如Debian 10/11/12),已开启SSH服务(默认开启)。
  • 本地电脑:Windows(PowerShell/Git Bash)、Mac、Linux,均可生成密钥对。

第二章 前置准备

2.1 本地电脑准备

确保本地电脑已安装终端工具:
  • Windows:安装Git Bash(推荐)或PowerShell,无需额外配置。
  • Mac/Linux:自带终端,直接使用即可。

2.2 服务器准备

  • 确保能通过密码正常登录服务器(用户名、服务器IP、SSH端口已知,默认端口为22)。
  • 服务器已安装sudo权限(普通用户可执行sudo命令,用于修改SSH配置)。

第三章 实操步骤(核心环节)

步骤1:本地电脑生成密钥对

密钥对需在本地电脑生成,推荐使用ed25519算法(比RSA更安全、效率更高),操作如下:

1.1 执行生成命令

  • Windows(Git Bash/PowerShell)、Mac、Linux通用命令: ssh-keygen -t ed25519 -C "your_email@example.com"
  • 说明:your_email@example.com 可替换为你的邮箱(仅用于标识密钥,无实际功能),也可省略。

1.2 跟随提示完成配置

执行命令后,将出现3次提示,按以下要求操作:
  1. 提示“Enter file in which to save the key”(指定密钥保存路径):直接按回车,使用默认路径(~/.ssh/id_ed25519),避免后续找不到密钥。
  1. 提示“Enter passphrase”(设置密钥密码):
    1. 可选操作:输入复杂密码(推荐,相当于给私钥加双重保护,即使私钥丢失,他人也无法使用);
    2. 也可直接按回车,设置为无密码(登录时无需输入密钥密码,更便捷)。
  1. 提示“Enter same passphrase again”(确认密钥密码):与上一步输入一致,无密码则直接回车。

1.3 确认密钥生成成功

生成完成后,本地 ~/.ssh 目录下会出现两个文件:
  • id_ed25519:私钥(核心,妥善保管,不可泄露);
  • id_ed25519.pub:公钥(后续需上传到服务器)。

步骤2:将公钥上传到Debian服务器

公钥需上传到服务器的指定目录(~/.ssh/authorized_keys),SSH服务会通过该文件验证私钥合法性。提供两种方法,推荐方法1(一键上传,最简单)。

方法1:一键上传(推荐)

  1. 本地终端执行命令(替换为你的服务器信息): # 格式:ssh-copy-id -p 服务器SSH端口 服务器用户名@服务器IP # 示例(默认端口22,用户名admin,IP为192.168.1.100): ssh-copy-id admin@192.168.1.100 # 若已修改SSH端口(如2222),则添加-p参数: ssh-copy-id -p 2222 admin@192.168.1.100
  1. 执行后,提示输入“服务器用户名的密码”,输入正确密码后,公钥会自动上传到服务器 ~/.ssh/authorized_keys 文件,无需手动操作。

方法2:手动上传(方法1失败时使用)

当一键上传失败(如服务器防火墙限制),可手动复制公钥到服务器,步骤如下:
  1. 本地终端查看公钥内容,复制全部输出: cat ~/.ssh/id_ed25519.pub复制结果(以ssh-ed25519开头,以你的邮箱或标识结尾,完整一行)。
  1. 用密码登录服务器(保持该终端打开,后续用于测试和配置): ssh 服务器用户名@服务器IP # 示例:ssh admin@192.168.1.100
  1. 在服务器终端,创建.ssh目录并设置正确权限(权限错误会导致SSH无法识别公钥):# 创建目录(-p确保目录不存在时创建) mkdir -p ~/.ssh # 设置目录权限为700(仅当前用户可读写执行) chmod 700 ~/.ssh
  1. 将复制的公钥写入authorized_keys文件: nano ~/.ssh/authorized_keys粘贴复制的公钥内容,按Ctrl+O(保存)→ 回车 → Ctrl+X(退出)。
  1. 设置authorized_keys文件权限(必须为600,否则SSH拒绝使用): chmod 600 ~/.ssh/authorized_keys # 确保目录和文件归属当前用户(替换admin为你的服务器用户名) chown -R admin:admin ~/.ssh

步骤3:测试密钥登录(关键步骤,必做)

⚠️ 重要提醒:不要关闭当前密码登录的服务器终端,避免配置出错后无法登录。新开一个本地终端,测试密钥登录是否可用。
  1. 本地新终端执行登录命令(替换为你的服务器信息): # 格式:ssh -p 服务器SSH端口 服务器用户名@服务器IP # 示例(默认端口22): ssh admin@192.168.1.100 # 若修改了端口(如2222): ssh -p 2222 admin@192.168.1.100
  1. 判断登录是否成功:
    1. 成功:无需输入服务器密码,直接登录到服务器终端;
    2. 若设置了密钥密码(passphrase):提示输入密钥密码,输入后登录成功,属于正常情况。
    3. 失败:检查公钥上传是否完整、目录/文件权限是否正确,重新执行步骤2。
确认密钥登录可用后,再进行下一步(禁用密码登录)。

步骤4:禁用密码登录(最终步骤)

密钥登录测试成功后,修改SSH配置,禁用密码登录,彻底杜绝暴力破解风险。操作如下:
  1. 在服务器终端(密码登录的终端或刚测试成功的密钥登录终端),编辑SSH配置文件: sudo nano /etc/ssh/sshd_config说明:使用sudo是因为该文件属于root用户,普通用户无编辑权限。
  1. 找到以下配置项,修改为对应值(没有则直接添加到文件末尾): # 禁用密码登录(核心配置) PasswordAuthentication no # 禁用挑战式密码验证(防止绕开密码禁用配置) ChallengeResponseAuthentication no # 确保公钥登录开启(默认开启,确认即可) PubkeyAuthentication yes
  1. 保存并退出:按Ctrl+O → 回车(保存)→ Ctrl+X(退出)。
  1. 重启SSH服务,使配置生效: sudo systemctl restart sshd

步骤5:验证密码登录已禁用

新开一个本地终端,尝试用密码登录服务器:ssh admin@192.168.1.100 若提示“Permission denied (publickey)”,说明密码登录已成功禁用,仅能通过密钥登录,配置完成。

第四章 额外安全配置(可选推荐)

4.1 给私钥添加双重保护(SSH代理)

若设置了密钥密码(passphrase),每次登录都需输入,可通过SSH代理保存密钥,避免重复输入:
  1. 本地终端执行,启动SSH代理:eval "$(ssh-agent -s)"
  1. 将私钥添加到代理(一次添加,重启终端后需重新添加): ssh-add ~/.ssh/id_ed25519输入密钥密码,后续登录服务器无需再输入。

4.2 加固SSH配置(可选)

结合之前的安全建议,可进一步修改SSH配置,提升安全性:
添加/修改以下配置:
  • 禁用root用户直接登录:PermitRootLogin no(需确保普通用户有sudo权限);
  • 修改SSH默认端口:Port 2222(替换为高位端口,如10022,减少扫描);
  • 限制登录超时时间:LoginGraceTime 20(登录超时20秒,防止暴力破解);
  • 只允许指定用户登录:AllowUsers admin(替换为你的服务器用户名)。
修改后重启SSH服务:sudo systemctl restart sshd,注意测试新端口登录是否正常。

第五章 常见问题排查

问题1:密钥登录提示“Permission denied (publickey)”

原因及解决方法:
  • 公钥未正确上传:重新执行步骤2,确保公钥完整写入authorized_keys
  • 目录/文件权限错误:重新设置权限(参考步骤2.2.5);
  • 私钥路径错误:确保本地登录时使用的私钥是~/.ssh/id_ed25519,未修改路径。

问题2:修改SSH配置后,无法登录服务器

解决方法:
  • 若未关闭之前的密码登录终端:立即在该终端修改SSH配置,恢复密码登录(PasswordAuthentication yes),重启SSH服务后重新配置;
  • 若已关闭终端:需通过服务器控制台(如阿里云、腾讯云控制台)登录,修改SSH配置恢复密码登录,再重新操作。

问题3:一键上传公钥(ssh-copy-id)失败

解决方法:
  • 检查服务器SSH端口是否开放(防火墙是否放行该端口);
  • 改用方法2(手动上传),确保公钥复制完整、权限正确。

第六章 总结

本教材完成了Debian服务器从密码登录到密钥登录的完整切换,核心流程可总结为:
  1. 本地生成密钥对(私钥存本地,公钥传服务器);
  1. 上传公钥到服务器并设置正确权限;
  1. 测试密钥登录可用;
  1. 禁用密码登录,完成加固。
关键注意事项:
  • 私钥是核心机密,绝对不能泄露、外传;
  • 全程不关闭密码登录终端,直到确认密钥登录可用;
  • 目录/文件权限必须严格设置(700/600),否则SSH无法识别公钥。
配置完成后,服务器将彻底抵御暴力破解、弱口令等攻击,登录安全性大幅提升。若服务器用于建站、挂程序等场景,可结合防火墙、fail2ban等工具,进一步强化安全防护。
上一篇
每日bing图片
下一篇
Vaultwarden 多服务器备份