在 Linux 中设置公私钥登录,能让远程连接既安全又便捷。其核心原理是:在本地机器生成一对数学上关联的“钥匙”(公钥和私钥),然后将公钥“锁”放在服务器上。当您登录时,服务器会用这把“锁”发起挑战,只有能正确“解锁”的本地私钥才能通过验证 。
生成SSH密钥对
首先,需要在您的本地机器上生成密钥对
可参考我之前的文章
https://blog.csdn.net/systemsb/article/details/147991344
生成成功后,会在 ~/.ssh/ 目录下看到两个文件:id_rsa(私钥,必须严格保密)和 id_rsa.pub(公钥,需要放到服务器上)。
将公钥上传至服务器
接下来,需要将本地的公钥上传到想登录的远程服务器上。
推荐方法:使用 ssh-copy-id 命令
这是最简单的方式,只需一行命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@服务器IP地址
例如:ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100 。系统会提示输入一次该服务器用户的密码,验证成功后公钥会自动添加到服务器对应用户家目录下的 ~/.ssh/authorized_keys 文件中 。
备用方法:手动上传
如果机器上没有 ssh-copy-id 命令,可以手动操作:
- 在本地查看并复制公钥内容:
复制终端显示的全部内容,从cat ~/.ssh/id_rsa.pubssh-rsa开始到邮箱注释结束 。 - 登录服务器,进入对应用户的
~/.ssh目录(如果没有则创建),并将公钥内容追加到authorized_keys文件:mkdir -p ~/.ssh echo "您复制的公钥内容" >> ~/.ssh/authorized_keys
配置服务器SSH服务
为了让服务器接受密钥登录,需要确保其SSH服务配置正确。登录服务器,编辑SSH配置文件 /etc/ssh/sshd_config 。
找到并确保以下参数设置如下:
PubkeyAuthentication yes # 启用公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径
# 可选配置:在确认密钥登录成功后,为增强安全,可以禁用密码登录
PasswordAuthentication no # 禁止密码认证
修改保存后,需要重启SSH服务以使配置生效。根据系统不同,命令可能是 systemctl restart sshd 或 service sshd restart 。
设置正确的文件权限
SSH协议对文件权限非常敏感,错误的权限会导致认证失败。请在服务器上执行以下命令,确保权限正确 :
# 设置.ssh目录权限为700 (仅所有者可读、写、执行)
chmod 700 ~/.ssh
# 设置authorized_keys文件权限为600 (仅所有者可读、写)
chmod 600 ~/.ssh/authorized_keys
测试密钥登录
现在,从您的本地机器新开一个终端,尝试登录服务器:
ssh 用户名@服务器IP地址
如果一切配置正确,将无需输入用户密码(如果私钥设置了密码,则需要输入之前设置的密钥密码)即可直接登录服务器 。
关键的安全注意事项
- 保护好私钥:私钥文件(如
id_rsa)相当于数字身份凭证,绝不能泄露给他人。建议在本地也对私钥文件设置严格的权限:chmod 600 ~/.ssh/id_rsa。 - 备份私钥:将私钥文件妥善备份在安全的地方(如加密的U盘)。一旦丢失,且服务器上禁用了密码登录,将无法再登录系统 。
- 谨慎禁用密码登录:在通过密钥登录测试成功之前,切勿在服务器上先行设置
PasswordAuthentication no。最好保持一个已活跃连接的SSH会话进行配置测试,以防配置出错导致自己被锁在服务器外面 。 - 服务器日志排查:如果测试登录失败,可以查看服务器的认证日志来寻找原因,例如在CentOS等系统上可以使用
sudo tail -f /var/log/secure命令查看实时日志 。
4807

被折叠的 条评论
为什么被折叠?



