Ubuntu 20.04下无需发送私钥为其他用户配置SSH访问的登录问题排查
Ubuntu 20.04下无需发送私钥为其他用户配置SSH访问的登录问题排查
首先直接回应你的核心疑问:绝对不能把私钥发给用户,这是非常严重的安全风险——私钥相当于用户的“数字钥匙”,只有用户自己应该持有,一旦泄露任何人都能冒充他登录服务器。你之前的操作逻辑搞反了,先给你理清楚正确的SSH密钥登录逻辑,再排查当前登录失败的问题。
一、正确的SSH密钥配置流程(完全无需发送私钥)
正常的密钥登录流程是用户在自己的本地机器生成密钥对,只把公钥发给你配置到服务器上:
- 用户在他自己的本地设备(比如笔记本、台式机)上生成密钥对,推荐用更安全的ed25519算法:
生成过程中按回车默认即可,要是用户需要额外安全可以设置密码,但不是必须。生成后,他本地的ssh-keygen -t ed25519~/.ssh/目录下会有两个文件:id_ed25519(私钥,必须自己保管)和id_ed25519.pub(公钥,可以放心发给你)。 - 用户把
id_ed25519.pub的内容通过邮件、聊天工具等方式发给你。 - 你在服务器上,把他的公钥内容追加到他的
~/.ssh/authorized_keys里,同时确保权限配置正确(你之前设置的权限是对的):# 先确保.ssh目录存在,不存在就创建 mkdir -p /home/username/.ssh # 把用户发的公钥内容粘贴进去,或者用echo追加(替换成实际的公钥内容) echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI..." >> /home/username/.ssh/authorized_keys # 配置权限,和你之前操作一致 sudo chown -R username:username /home/username/.ssh sudo chmod 0700 /home/username/.ssh sudo chmod 0600 /home/username/.ssh/authorized_keys
二、当前登录失败的原因及排查步骤
你现在登录失败的根本原因是:你在服务器上生成了密钥对,对应的私钥留在了服务器本地,用户的机器上没有这个私钥,自然无法通过密钥验证。除此之外,还可以通过以下步骤排查其他潜在问题:
- 查看SSH服务日志:在服务器上执行
tail -f /var/log/auth.log,然后让用户尝试登录,日志里会明确提示错误原因(比如密钥不匹配、权限问题、SSHD配置限制等)。 - 检查SSHD配置:打开
/etc/ssh/sshd_config文件,确保以下配置项是开启的:
修改后记得重启SSH服务:PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2sudo systemctl restart sshd - 确认用户主目录权限:用户的主目录
/home/username权限不能太开放,比如不能是777,建议设置为755:sudo chmod 755 /home/username
总结
- 私钥永远不能外传,必须由用户自己在本地生成并妥善保管,这是SSH密钥登录的安全基础。
- 你之前的权限配置是正确的,但密钥对的生成位置搞反了,才导致用户无法登录。
- 按照正确流程让用户生成并提供公钥,再配置到服务器上,就能解决登录问题。
备注:内容来源于stack exchange,提问作者A.Manfreda




