LinuxSSH免密登录配置_密钥认证步骤

5次阅读

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

LinuxSSH 免密登录配置_密钥认证步骤

Linux SSH 免密登录靠的是公钥认证机制,核心是把本地的公钥传到远程服务器的 ~/.ssh/authorized_keys 文件中,让服务端能用它验证客户端的身份。

生成本地密钥对

在你常用的登录机器(比如你的笔记本)上执行:

  • 运行 ssh-keygen -t rsa -b 4096(推荐 RSA 4096 位,也可用 ed25519ssh-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 yes
    AuthorizedKeysFile .ssh/authorized_keys
    PermitRootLogin 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 修复上下文
text=ZqhQzanResources