SSH免密登录

实现 SSH 免密登录(Public Key Authentication)主要分为两个步骤:在本地生成密钥对将公钥上传至远程服务器

以下是通用的配置步骤(适用于 Linux/macOS/Windows PowerShell):

第一步:在本地生成密钥对

如果你的本地电脑(客户端)还没有 SSH 密钥,需要先生成一个。

  1. 打开终端(Terminal 或 PowerShell)。
  2. 输入以下命令:
ssh-keygen -t rsa -b 4096

或者使用更现代的算法(推荐): ssh-keygen -t ed25519
3. 一路按回车键

  • 当提示 Enter file in which to save the key 时,按回车(默认保存在 ~/.ssh/id_rsa)。
  • 当提示 Enter passphrase 时,一定要按回车留空(如果设置了密码,登录时就需要输入这个密码,就无法实现“免密”了)。

第二步:将公钥上传到服务器

最简单的方法是使用 ssh-copy-id 命令。

假设你的远程服务器用户名是 root,IP 是 192.168.1.100

ssh-copy-id root@192.168.1.100
  • 系统会提示你输入一次远程服务器的密码。
  • 注意: 如果你在 Windows 上且没有安装 Git Bash,可能无法使用 ssh-copy-id,请参看下方的“手动复制法”。

第三步:测试登录

上传成功后,尝试登录:

ssh root@192.168.1.100

如果直接进入系统而不需要输入密码,说明配置成功。


💡 常见问题与排查

如果配置后仍然需要密码,通常是以下两个原因:

1. 权限问题(最常见)

Linux 对 SSH 目录的权限要求非常严格。登录到服务器,执行以下命令修复权限:

# 在服务器上执行
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2. 手动复制法(Windows 备选)

如果没有 ssh-copy-id,可以用以下命令将公钥追加到服务器的授权列表中:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh root@192.168.1.100 "cat >> .ssh/authorized_keys"

(确保服务器上 ~/.ssh 文件夹已存在)