本文档用于指导用户完成「本地生成SSH密钥」「服务器(root权限)添加公钥」「实现免密登录」的全流程操作,适用于Linux/Mac/Windows系统,步骤清晰可直接对照执行,确保操作安全、高效。
核心目标:通过SSH密钥登录服务器(root用户),替代密码登录,提升安全性和登录便捷性。
本地设备:已安装终端(Mac/Linux自带终端;Windows需安装Git Bash、CMD或PowerShell)。
服务器:已获取root账号权限,知道服务器IP或主机名(如本文示例中的4090-109)。
网络:本地设备与服务器可正常连通(可通过ping命令测试)。
打开本地终端,输入以下命令(直接复制执行),生成ed25519算法密钥(比传统rsa更安全、更快):
bashssh-keygen -t ed25519 -C "你的常用邮箱"
说明:邮箱仅作为密钥备注,可填写任意常用邮箱(如yourname@example.com),不影响使用。
执行命令后,会出现3个提示,无需修改任何配置,直接按回车即可:
提示“Enter file in which to save the key”:默认保存路径为~/.ssh/,无需修改,回车确认。
提示“Enter passphrase”:密码(可选),直接回车表示无密码(更便捷,适合个人使用)。
提示“Enter same passphrase again”:再次回车确认无密码。
当终端出现类似以下密钥图案时,说明密钥生成成功:
text+--[ED25519 256]--+ | .o+++. | | . o+*+ | +----[SHA256]-----+
生成的密钥文件存放在本地~/.ssh/目录下,包含两个核心文件:
私钥(id_ed25519):仅保存在本地,绝对不能泄露、不能上传至服务器或分享给他人。
公钥(id_ed25519.pub):需要复制到服务器,用于实现免密登录。
执行以下命令,查看并复制公钥内容(复制输出的一整串内容,不要遗漏任何字符):
Mac/Linux终端:cat ~/.ssh/id_ed25519.pub
Windows(CMD):type %USERPROFILE%\.ssh\id_ed25519.pub
Windows(PowerShell):cat $HOME\.ssh\id_ed25519.pub
复制的公钥格式示例:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM0iKgqFb7lk+FhfvHFeISbi1QapFxyKCVkW/4xdR+gQ 你的邮箱
在本地终端输入以下命令,使用root账号登录服务器(需输入root密码):
bashssh root@服务器IP或主机名
示例(通用示例):ssh root@xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx替换为你的服务器IP)
登录成功后,执行以下命令,进入root用户的.ssh目录(用于存放公钥文件):
bashcd /root/.ssh
若提示“no such file or directory”(目录不存在),先执行以下命令创建目录并设置权限:
bashmkdir -p /root/.ssh
chmod 700 /root/.ssh
执行以下命令,将刚才复制的本地公钥追加到服务器的authorized_keys文件中(关键步骤,避免覆盖旧公钥):
bashecho "你复制的一整串公钥内容" >> /root/.ssh/authorized_keys
示例(通用示例):
bashecho "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 你的邮箱" >> /root/.ssh/authorized_keys
说明:使用“>>”是追加内容,若使用“>”会覆盖原有公钥,导致其他设备无法登录,务必注意。
执行以下命令,查看authorized_keys文件内容,确认公钥已成功添加:
bashcat /root/.ssh/authorized_keys
正常输出示例(可存在多个公钥,每行一个,公钥内容用占位符示意):
textssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX root@xxx-hostname ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SSH对文件和目录权限要求严格,权限错误会导致免密登录失败,直接复制执行以下两条命令,设置正确权限:
bashchmod 600 /root/.ssh/authorized_keys
chown root:root /root/.ssh/authorized_keys
验证权限:执行ls -l /root/.ssh,输出如下即为权限正确(参考本文实操案例):
texttotal 4 -rw------- 1 root root 651 Apr 2 09:29 authorized_keys
多数情况下,添加公钥并设置权限后无需重启,但若后续登录失败,可执行以下命令重启sshd服务:
bashsystemctl restart sshd
在本地终端(无需登录服务器的新终端),输入以下命令,测试是否能免密登录:
bashssh root@服务器IP或主机名
示例:ssh root@xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx替换为你的服务器IP)
✅ 成功标志:无需输入密码,直接进入服务器root用户终端(显示root@服务器主机名:~#)。
排查1:本地私钥与服务器公钥不匹配,确认本地复制的公钥是id_ed25519.pub的内容,且未修改字符。
排查2:服务器authorized_keys或.ssh目录权限错误,重新执行4.5节的权限设置命令。
排查3:服务器sshd配置禁止密钥登录(极少),可检查/etc/ssh/sshd_config文件,确保PubkeyAuthentication yes(需重启sshd)。
原因:未使用root权限登录服务器,重新执行4.1节,确保以root账号登录(ssh root@服务器IP)。
原因:未成功生成密钥,重新执行3.1-3.2节,确保全程按回车完成密钥生成。
私钥(id_ed25519)务必妥善保管在本地,绝对不能泄露、上传至公共平台或分享给他人,否则服务器会有被入侵风险。
authorized_keys文件使用“>>”追加公钥,避免使用“>”覆盖,防止原有公钥丢失。
若需更换密钥,直接重新生成新密钥,重复本文步骤添加新公钥即可,无需删除旧公钥(可保留多个公钥,实现多设备登录)。
若设备较老,不支持ed25519算法,可使用rsa算法生成密钥:ssh-keygen -t rsa -b 4096 -C "你的邮箱",后续步骤完全一致。
若觉得手动添加公钥繁琐,可在本地终端直接执行以下命令,一键上传公钥至服务器(需输入一次root密码,自动完成目录创建、公钥添加和权限设置):
bashssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP或主机名
示例:ssh-copy-id -i ~/.ssh/id_ed25519.pub root@xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx替换为你的服务器IP)
(注:文档部分内容可能由 AI 生成)
本文作者:苏皓明
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!