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次提示,按以下要求操作:
- 提示“Enter file in which to save the key”(指定密钥保存路径):直接按回车,使用默认路径(
~/.ssh/id_ed25519),避免后续找不到密钥。
- 提示“Enter passphrase”(设置密钥密码):
- 可选操作:输入复杂密码(推荐,相当于给私钥加双重保护,即使私钥丢失,他人也无法使用);
- 也可直接按回车,设置为无密码(登录时无需输入密钥密码,更便捷)。
- 提示“Enter same passphrase again”(确认密钥密码):与上一步输入一致,无密码则直接回车。
1.3 确认密钥生成成功
生成完成后,本地
~/.ssh 目录下会出现两个文件:id_ed25519:私钥(核心,妥善保管,不可泄露);
id_ed25519.pub:公钥(后续需上传到服务器)。
步骤2:将公钥上传到Debian服务器
公钥需上传到服务器的指定目录(
~/.ssh/authorized_keys),SSH服务会通过该文件验证私钥合法性。提供两种方法,推荐方法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
- 执行后,提示输入“服务器用户名的密码”,输入正确密码后,公钥会自动上传到服务器
~/.ssh/authorized_keys文件,无需手动操作。
方法2:手动上传(方法1失败时使用)
当一键上传失败(如服务器防火墙限制),可手动复制公钥到服务器,步骤如下:
- 本地终端查看公钥内容,复制全部输出:
cat ~/.ssh/id_ed25519.pub复制结果(以ssh-ed25519开头,以你的邮箱或标识结尾,完整一行)。
- 用密码登录服务器(保持该终端打开,后续用于测试和配置):
ssh 服务器用户名@服务器IP # 示例:ssh admin@192.168.1.100
- 在服务器终端,创建
.ssh目录并设置正确权限(权限错误会导致SSH无法识别公钥):# 创建目录(-p确保目录不存在时创建) mkdir -p ~/.ssh # 设置目录权限为700(仅当前用户可读写执行) chmod 700 ~/.ssh
- 将复制的公钥写入
authorized_keys文件:nano ~/.ssh/authorized_keys粘贴复制的公钥内容,按Ctrl+O(保存)→ 回车 →Ctrl+X(退出)。
- 设置
authorized_keys文件权限(必须为600,否则SSH拒绝使用):chmod 600 ~/.ssh/authorized_keys # 确保目录和文件归属当前用户(替换admin为你的服务器用户名) chown -R admin:admin ~/.ssh
步骤3:测试密钥登录(关键步骤,必做)
⚠️ 重要提醒:不要关闭当前密码登录的服务器终端,避免配置出错后无法登录。新开一个本地终端,测试密钥登录是否可用。
- 本地新终端执行登录命令(替换为你的服务器信息):
# 格式:ssh -p 服务器SSH端口 服务器用户名@服务器IP # 示例(默认端口22): ssh admin@192.168.1.100 # 若修改了端口(如2222): ssh -p 2222 admin@192.168.1.100
- 判断登录是否成功:
- 成功:无需输入服务器密码,直接登录到服务器终端;
- 若设置了密钥密码(passphrase):提示输入密钥密码,输入后登录成功,属于正常情况。
- 失败:检查公钥上传是否完整、目录/文件权限是否正确,重新执行步骤2。
确认密钥登录可用后,再进行下一步(禁用密码登录)。
步骤4:禁用密码登录(最终步骤)
密钥登录测试成功后,修改SSH配置,禁用密码登录,彻底杜绝暴力破解风险。操作如下:
- 在服务器终端(密码登录的终端或刚测试成功的密钥登录终端),编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config说明:使用sudo是因为该文件属于root用户,普通用户无编辑权限。
- 找到以下配置项,修改为对应值(没有则直接添加到文件末尾):
# 禁用密码登录(核心配置) PasswordAuthentication no # 禁用挑战式密码验证(防止绕开密码禁用配置) ChallengeResponseAuthentication no # 确保公钥登录开启(默认开启,确认即可) PubkeyAuthentication yes
- 保存并退出:按
Ctrl+O→ 回车(保存)→Ctrl+X(退出)。
- 重启SSH服务,使配置生效:
sudo systemctl restart sshd
步骤5:验证密码登录已禁用
新开一个本地终端,尝试用密码登录服务器:
ssh admin@192.168.1.100
若提示“Permission denied (publickey)”,说明密码登录已成功禁用,仅能通过密钥登录,配置完成。第四章 额外安全配置(可选推荐)
4.1 给私钥添加双重保护(SSH代理)
若设置了密钥密码(passphrase),每次登录都需输入,可通过SSH代理保存密钥,避免重复输入:
- 本地终端执行,启动SSH代理:
eval "$(ssh-agent -s)"
- 将私钥添加到代理(一次添加,重启终端后需重新添加):
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服务器从密码登录到密钥登录的完整切换,核心流程可总结为:
- 本地生成密钥对(私钥存本地,公钥传服务器);
- 上传公钥到服务器并设置正确权限;
- 测试密钥登录可用;
- 禁用密码登录,完成加固。
关键注意事项:
- 私钥是核心机密,绝对不能泄露、外传;
- 全程不关闭密码登录终端,直到确认密钥登录可用;
- 目录/文件权限必须严格设置(700/600),否则SSH无法识别公钥。
配置完成后,服务器将彻底抵御暴力破解、弱口令等攻击,登录安全性大幅提升。若服务器用于建站、挂程序等场景,可结合防火墙、fail2ban等工具,进一步强化安全防护。
- Author:lost4
- URL:https://blog.lost4.vip/article/31f34f8b-4cc2-80c9-9614-d72a165628f7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!





