使用SSH密钥对实现免密登录
约 771 字大约 3 分钟
2026-08-29
配置 SSH 密钥后,登录 Linux 实例不再需要输入密码,既方便也更安全(可抵御密码暴力破解)。本文介绍从本地生成密钥、部署到实例到配置登录别名的完整流程。
两种密钥来源
实例创建时可在控制面板绑定密钥对,或像本文这样在本地生成后手动部署到实例,两者效果一致。SSH 无法登录处理中的密钥排障同样适用于本文场景。
在本地生成密钥对
macOS / Windows 10/11 自带的 OpenSSH 均可执行:
ssh-keygen -t ed25519 -C "备注,如 svyun-docs"- 回车使用默认保存位置(
~/.ssh/id_ed25519)。 passphrase可留空直接回车(留空即免密;填写则每次登录需输入口令,更安全)。
生成两个文件:id_ed25519(私钥,绝不能外泄)与 id_ed25519.pub(公钥,部署到服务器)。
把公钥部署到实例
方式一:ssh-copy-id(macOS / Linux,一键)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<实例IP>
# 修改过端口的:ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 root@<实例IP>输入最后一次密码后即部署完成,之后登录不再需要密码。
方式二:手动部署(Windows PowerShell 也可用)
# 查看公钥内容并复制
type $env:USERPROFILE\.ssh\id_ed25519.pub先正常用密码登录实例,把公钥追加进去:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA...粘贴你的公钥..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys权限是免密生效的关键
~/.ssh 必须是 700、authorized_keys 必须是 600、家目录不能对组/其他人可写,否则 SSH 会静默忽略公钥、继续要求密码。
配置登录别名(可选但推荐)
编辑本地 ~/.ssh/config(Windows 在 C:\Users\用户名\.ssh\config):
Host myserver
HostName <实例IP>
User root
Port 22
IdentityFile ~/.ssh/id_ed25519以后只需 ssh myserver 即可登录,scp/sftp 同样可用别名。
(可选)关闭密码登录
确认新开一个终端能用密钥正常登录后,再在实例上加固:
sudo vi /etc/ssh/sshd_config
# 找到并改为:PasswordAuthentication no
sudo systemctl restart sshd先确认密钥能登录
关闭密码登录前,务必保持当前 SSH 会话不断开,并用密钥新开连接验证成功。否则可能把自己锁在门外(届时只能通过 VNC 控制台或单用户模式修复)。
常见问题
配置后仍提示输入密码?
按顺序检查:
- 本地公钥内容是否完整粘贴(一行、以
ssh-ed25519或ssh-rsa开头)。 - 实例内
authorized_keys、~/.ssh、家目录权限(见上文警告)。 sshd_config中PubkeyAuthentication yes未被禁用。- 用
ssh -v root@<实例IP>查看 "Authentications that can continue" 判断服务端是否提供公钥认证。
换电脑了怎么办?
在新电脑重新生成密钥对,把新公钥追加到实例的 authorized_keys(一行一把公钥,多台设备可共存)。
私钥丢了 / 想吊销?
从 ~/.ssh/authorized_keys 删除对应公钥行即可吊销该设备的登录权限。
