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安装。
方法二:手动复制公钥
-
查看并复制公钥内容:
cat ~/.ssh/id_rsa.pub复制输出的整串内容。
-
登录服务器:
ssh username@server_ip -
在服务器上将公钥添加到
authorized_keys文件:mkdir -p ~/.ssh
echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3. 测试免密登录
退出服务器后重新连接:
ssh username@server_ip
如果不再提示输入密码,则配置成功。
常见问题排查
- 权限问题:确保服务器上的
~/.ssh目录权限为700,authorized_keys文件权限为600。 - SELinux / AppArmor:某些系统开启安全模块可能阻止登录,可临时关闭测试。
- SSH 配置限制:检查服务器
/etc/ssh/sshd_config文件中是否允许公钥认证:修改后需重启 SSH 服务:PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keyssudo systemctl restart sshd
✅ 完成以上步骤后,你就可以实现 SSH 免密登录服务器了。安全起见,建议保留私钥的访问控制,并考虑使用 SSH Agent 管理密钥。