Linux 免密登录依赖 SSH 密钥对认证,需本地生成 ed25519 密钥对、将公钥用 ssh-copy-id 部署至服务器~/.ssh/authorized_keys,并确保服务端启用 PubkeyAuthentication 及权限正确(私钥 600、目录 700)。

Linux 免密登录靠的是 SSH 密钥对认证,核心是本地生成密钥对,再把公钥传到目标服务器的 ~/.ssh/authorized_keys 里。只要私钥安全、权限设置正确,就能跳过密码直接登录。
生成 SSH 密钥对(推荐 ed25519)
在你自己的 电脑(或跳板机)上执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
回车接受默认路径(~/.ssh/id_ed25519),可选设个密钥口令(为空则完全免密,设了需输一次口令解锁私钥)。完成后会生成两个文件:
-
id_ed25519:私钥(绝不能泄露,权限应为 600) -
id_ed25519.pub:公钥(可公开,要传到服务器)
把公钥复制到远程服务器
最简单安全的方式是用ssh-copy-id(无需手动处理权限):
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
它会自动创建 ~/.ssh 目录、写入 authorized_keys,并设好权限(~/.ssh 为 700,authorized_keys为 600)。如果提示命令未找到,可手动复制公钥内容,粘贴进服务器的 ~/.ssh/authorized_keys 末尾(确保换行结尾)。
检查并启用密钥登录(服务端配置)
登录服务器后,确认 SSH 服务允许公钥认证:
sudo grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_config
正常应看到:
PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
如有修改,运行 sudo systemctl restart sshd 重载配置。注意:别关掉密码登录,直到确认密钥能成功登录后再禁用(改PasswordAuthentication no)。
测试与排错要点
本地终端运行:ssh -i ~/.ssh/id_ed25519 user@server_ip(显式指定私钥)
- 报“Permission denied (publickey)”:检查服务器
~/.ssh/authorized_keys内容是否完整、有无多余空格;确认该文件属主是当前用户且权限为 600 - 报“Connection closed by remote host”:可能是
sshd_config中StrictModes yes导致,检查~/.ssh和家目录权限(家目录不能是 777 或含组 / 其他写权限) - 想省略
-i参数:把私钥加到~/.ssh/config中,配IdentityFile字段
基本上就这些。不复杂但容易忽略权限和路径细节。