误执行rsync后无法通过公钥SSH登录AlmaLinux 9服务器的user2账户求助
听起来你碰到的是个典型的“误操作引发连锁权限问题”的情况——本来公钥登录好好的,误跑了带尾斜杠的rsync、删了目标目录内容后,突然就公钥验证失败了,密码登录却正常。结合你描述的细节,我帮你梳理下排查方向和解决方案:
先重点排查最容易被忽略的家目录权限问题
你提到Server2上user2的根目录权限是0775,这很可能就是问题所在!SSH对公钥登录的家目录权限有严格的安全限制:家目录不能给其他用户开放写权限,否则SSH服务会直接拒绝公钥验证(怕被其他用户篡改密钥文件)。
先在Server2上检查user2家目录的权限和属主:
ls -ld /home/user2
正常要求是:
- 权限为
0700(仅所有者可读可写可执行),或者0755(其他用户仅可读,不能写) - 属主和属组必须是
user2:user2
如果不符合,立刻修复:
# 修复权限 chmod 700 /home/user2 # 修复属主属组 chown user2:user2 /home/user2
这一步大概率能解决问题,毕竟你之前做过rsync和删除操作,很可能不小心改动了家目录的属性。
查看SSH服务日志,精准定位失败原因
客户端的Permission denied提示太笼统,去Server2上看SSH的详细日志,能直接看到为什么公钥验证被拒。AlmaLinux 9的SSH日志在/var/log/secure里,执行:
tail -f /var/log/secure
然后从客户端(Server1或你的笔记本)尝试用公钥登录user2,日志里会输出具体错误,比如bad ownership or modes for directory /home/user2、invalid key或者SELinux context mismatch之类的,直接指向问题根源。
验证authorized_keys的完整性和格式
虽然你说没改动这个文件,但保险起见,检查下user1的公钥是否正常:
cat /home/user2/.ssh/authorized_keys
确保user1的公钥是单独一行,格式是标准的ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... user1@server1,没有多余的空格、换行或者乱码。
用verbose模式看客户端的连接细节
在客户端执行带-vv参数的SSH命令,能看到公钥登录的完整过程:
ssh -vv user2@domain2
重点看输出里关于公钥的部分,比如Offering public key: ...之后服务器的响应,如果服务器拒绝,会有明确的提示信息,帮你缩小排查范围。
排查SELinux的影响
AlmaLinux 9默认开启SELinux,如果user2的.ssh目录或authorized_keys文件的SELinux上下文被误改,也会导致公钥登录失败。检查上下文:
ls -Z /home/user2/.ssh/
正常情况下,authorized_keys的上下文应该是system_u:object_r:ssh_home_t:s0,如果不对,用下面的命令修复:
restorecon -Rv /home/user2/.ssh/
总结
你的问题大概率是误操作导致user2家目录权限不符合SSH的安全要求,先从家目录权限入手修复,再结合日志和verbose输出确认问题。只要密码登录正常,说明账户本身没问题,公钥登录的问题基本都和权限、配置文件格式、SELinux这几个点有关。
备注:内容来源于stack exchange,提问作者dstonek

