如何配置 SSH 免密登录?

每次 SSH 连接都要输入密码很麻烦,想配置密钥认证实现免密登录

解决方案

生成密钥 + ssh-copy-id(推荐) 推荐

# 1. 生成 Ed25519 密钥对
ssh-keygen -t ed25519 -C "your@email.com"
# 按回车使用默认路径,设置或跳过 passphrase

# 2. 将公钥复制到远程服务器
ssh-copy-id user@server.example.com
# 输入一次密码完成复制

# 3. 测试免密登录
ssh user@server.example.com
# 应该直接登录,不再要求密码

ssh-copy-id 会自动将公钥追加到远程服务器的 ~/.ssh/authorized_keys 文件中,并设置正确的文件权限。这是最简单可靠的方式。

适用场景:Linux/macOS 环境,远程服务器当前允许密码登录

手动复制公钥(无 ssh-copy-id 时)

# 1. 生成密钥(如果还没有)
ssh-keygen -t ed25519 -C "your@email.com"

# 2. 查看公钥内容
cat ~/.ssh/id_ed25519.pub

# 3. 登录远程服务器手动添加
ssh user@server
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo '粘贴你的公钥内容' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
exit

# 4. 测试
ssh user@server

手动创建目录和文件,将公钥内容追加到 authorized_keys。需要注意权限设置,否则 SSH 会拒绝使用。

适用场景:Windows 环境或系统没有 ssh-copy-id 命令

配合 ssh-agent 避免重复输入 passphrase

# 1. 启动 ssh-agent
eval $(ssh-agent -s)

# 2. 添加密钥(输入一次 passphrase)
ssh-add ~/.ssh/id_ed25519

# 3. 在 ~/.ssh/config 中配置自动添加
Host *
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_ed25519

如果生成密钥时设置了 passphrase,每次使用都要输入。ssh-agent 可以缓存解密后的密钥,只需输入一次。

适用场景:密钥设置了 passphrase 保护,想要安全与便利兼顾

注意事项

私钥文件权限必须为 600(chmod 600 ~/.ssh/id_ed25519),否则 SSH 拒绝使用
不要将私钥复制到远程服务器,只复制公钥(.pub 文件)
配置免密后建议在服务端禁用密码认证(PasswordAuthentication no)提高安全性

相关命令