跳到主要内容

ssh免密登陆

1. 在本地生成 SSH 密钥对

在你的本地机器(客户端)上执行以下命令生成密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa -b 4096:指定使用 RSA 算法,密钥长度为 4096 位。
  • -C "your_email@example.com":添加注释(可选,用于标识密钥)。

执行后会提示你:

  • 保存密钥的文件路径(默认是 ~/.ssh/id_rsa)。
  • 设置密钥的密码(passphrase),如果希望完全免密登录,此处可直接回车留空

完成后会生成两个文件:

  • ~/.ssh/id_rsa:私钥(务必保密
  • ~/.ssh/id_rsa.pub:公钥

2. 将公钥复制到服务器

方法一:使用 ssh-copy-id(推荐)

ssh-copy-id username@server_ip

例如:

ssh-copy-id user@192.168.1.100

系统会提示你输入一次密码,之后公钥就会被自动添加到服务器的 ~/.ssh/authorized_keys 文件中。

⚠️ 如果 ssh-copy-id 命令不存在(如 macOS 默认没有),可通过 brew install ssh-copy-id 安装。

方法二:手动复制公钥

  1. 查看并复制公钥内容:

    cat ~/.ssh/id_rsa.pub

    复制输出的整串内容。

  2. 登录服务器:

    ssh username@server_ip
  3. 在服务器上将公钥添加到 authorized_keys 文件:

    mkdir -p ~/.ssh
    echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

3. 测试免密登录

退出服务器后重新连接:

ssh username@server_ip

如果不再提示输入密码,则配置成功。


常见问题排查

  • 权限问题:确保服务器上的 ~/.ssh 目录权限为 700authorized_keys 文件权限为 600
  • SELinux / AppArmor:某些系统开启安全模块可能阻止登录,可临时关闭测试。
  • SSH 配置限制:检查服务器 /etc/ssh/sshd_config 文件中是否允许公钥认证:
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    修改后需重启 SSH 服务:
    sudo systemctl restart sshd

✅ 完成以上步骤后,你就可以实现 SSH 免密登录服务器了。安全起见,建议保留私钥的访问控制,并考虑使用 SSH Agent 管理密钥。