Ubuntu SSH 密钥免密登录配置
从本机生成 SSH 密钥对、把公钥拷到 Ubuntu 服务器实现免密登录:ssh-keygen 与 ssh-copy-id 的标准流程、私钥保管纪律、以及密钥登录失败先查什么。
结论先行
Ubuntu 上配免密登录的标准两步:本机 ssh-keygen 生成密钥对 → ssh-copy-id 把公钥送到目标机(Ubuntu 26.04 Live Server 条目 对应的服务器即目标;桌面版 条目 也适用);私钥永远不离开本机,只传 .pub 公钥。
标准流程
# 本机(Windows 自带 ssh 或 Ubuntu 桌面)
ssh-keygen -t ed25519 -C "备注" # 一路回车即可,设 passphrase 更安全
ssh-copy-id 用户名@服务器IP # 输一次口令,之后免密
ssh 用户名@服务器IP # 验证免密登录
ssh-copy-id本质是把~/.ssh/id_ed25519.pub追加到目标机~/.ssh/authorized_keys。- 没有 ssh-copy-id(部分精简系统)就手动把公钥追加进目标机的 authorized_keys,目录
700、文件600。
目标机要具备的条件
sshd服务在跑:systemctl status ssh。- 允许公钥认证:
sshd_config里PubkeyAuthentication yes(默认即开,改过才查)。 - 密钥文件权限对:
~/.ssh700、authorized_keys600,权限过宽 sshd 会拒绝。
免密仍失败先查这几处
ssh -v 用户名@IP看握手日志:卡在 password 说明公钥没被接受。- 目标机
journalctl -u ssh看 sshd 拒绝原因(常见是权限或authorized_keys放错家目录)。 - 确认
ssh-copy-id用的是同一对密钥(多把密钥时用-i指定)。
私钥带 passphrase 时每次登录要再输一次口令,这是特性不是 bug;怕麻烦可以不设,但密钥文件落地的机器被偷/被读时,无 passphrase 私钥 = 直接能登录。