Linux切换用户后目录中SSH密钥文件消失的问题求助
解决多用户服务器SSH密钥复制后切换用户消失的问题
我来帮你排查这个问题,这种情况通常是复制过程中的权限设置、操作细节或者系统安全机制导致的,咱们一步步来解决:
先排查最容易忽略的操作细节
首先确认你切换用户时的命令是否正确:
- 如果你用的是
su 用户名,切换后会停留在当前root的工作目录,并不会自动进入普通用户的家目录,这时候你当然看不到~/.ssh下的文件。 - 正确的切换命令应该是
su - 用户名(带横杠),这样会加载用户的环境变量并直接进入其家目录,之后再执行ls -la .ssh/看看文件是否存在。
检查文件权限与所有权
直接复制root的.ssh文件夹容易导致权限继承问题,哪怕你修改了所有权,可能还有权限位不对的情况:
- 在root账户下,先确认目标用户的
.ssh目录及文件权限:
正常情况下,ls -la /home/目标用户名/.ssh/.ssh目录权限应该是700(只有所有者能读写执行),密钥文件id_rsa权限是600(只有所有者能读写),公钥id_rsa.pub权限是644(所有者读写,其他人只读)。 - 如果权限不对,重新设置:
# 修正目录权限 chmod 700 /home/目标用户名/.ssh/ # 修正密钥文件权限 chmod 600 /home/目标用户名/.ssh/id_rsa # 修正公钥文件权限 chmod 644 /home/目标用户名/.ssh/id_rsa.pub # 确保所有权完全归属目标用户 chown -R 目标用户名:目标用户名 /home/目标用户名/.ssh/
排查SELinux上下文问题
很多服务器默认开启SELinux,复制root的文件会导致SELinux上下文不正确,普通用户可能无法访问:
- 在root下对比root和普通用户密钥文件的SELinux上下文:
ls -Z /root/.ssh/id_rsa ls -Z /home/目标用户名/.ssh/id_rsa - 如果上下文不一致,修复普通用户目录的SELinux上下文:
restorecon -Rv /home/目标用户名/.ssh/
检查文件隐藏属性
如果上述步骤都没用,看看文件是否被设置了不可变属性:
- 在root下查看文件属性:
lsattr /home/目标用户名/.ssh/id_rsa - 如果输出中有
i标记,说明文件被设为不可变,普通用户无法查看或修改,去掉该属性:chattr -i /home/目标用户名/.ssh/id_rsa
更稳妥的密钥复制方式
其实不建议直接复制root的.ssh文件夹,更稳妥的做法是为每个用户单独创建并配置:
# 1. 为目标用户创建.ssh目录(如果不存在) mkdir -p /home/目标用户名/.ssh/ # 2. 设置目录权限和所有权 chown 目标用户名:目标用户名 /home/目标用户名/.ssh/ chmod 700 /home/目标用户名/.ssh/ # 3. 复制密钥文件 cp /root/.ssh/id_rsa /home/目标用户名/.ssh/ cp /root/.ssh/id_rsa.pub /home/目标用户名/.ssh/ # 4. 设置文件权限和所有权 chown 目标用户名:目标用户名 /home/目标用户名/.ssh/id_rsa* chmod 600 /home/目标用户名/.ssh/id_rsa chmod 644 /home/目标用户名/.ssh/id_rsa.pub
内容的提问来源于stack exchange,提问作者Marvin Medeiros
相关产品推荐
相关产品推荐

