如何配置 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)提高安全性