linux ssh 免密登录依赖公钥认证,需将本地公钥写入远程服务器~/.ssh/authorized_keys 并确保权限正确(目录 700、文件 600),同时服务端 sshd_config 启用 pubkeyauthentication。

Linux SSH 免密登录靠的是公钥认证机制,核心是把本地的公钥传到远程服务器的 ~/.ssh/authorized_keys 文件中,让服务端能用它验证客户端的身份。
生成本地密钥对
在你常用的登录机器(比如你的笔记本)上执行:
- 运行
ssh-keygen -t rsa -b 4096(推荐 RSA 4096 位,也可用ed25519:ssh-keygen -t ed25519) - 按回车接受默认路径(通常是
~/.ssh/id_rsa和~/.ssh/id_rsa.pub) - 可直接回车跳过密码短语(passphrase),若设了,每次使用私钥时需输入
上传公钥到目标服务器
有三种常用方式,推荐前两种:
-
ssh-copy-id user@host—— 最简单,自动完成创建目录、设置权限、追加公钥 - 手动复制:
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" - 如果
ssh-copy-id不可用(如某些精简系统),就用第二种命令,注意权限必须严格:~/.ssh是 700,authorized_keys是 600
验证并启用免密登录
确保远程服务器 SSH 配置支持公钥认证:
- 检查
/etc/ssh/sshd_config中这几项是否启用:PubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keysPermitRootLogin prohibit-password(如需 root 登录,建议设为without-password或禁用) - 改完配置后重启服务:
sudo systemctl restart sshd(或sshd,视系统而定) - 测试连接:
ssh -o PreferredAuthentications=publickey user@host,成功即免密
进阶提示与排错
常见问题大多出在权限和路径上:
- 私钥文件(如
id_rsa)权限不能太宽松,本地需chmod 600 ~/.ssh/id_rsa - 远程
~/.ssh目录不能被组或其他人写,否则 SSH 会拒绝读取authorized_keys - 用
ssh -v user@host查看详细日志,重点关注debug1: Authentications that can continue: publickey及后续是否尝试公钥 - SELinux 启用时可能拦截访问,临时关闭测试:
setenforce 0;确认是 SELinux 导致后,用restorecon -Rv ~/.ssh修复上下文






























