You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux切换用户后目录中SSH密钥文件消失的问题求助

解决多用户服务器SSH密钥复制后切换用户消失的问题

我来帮你排查这个问题,这种情况通常是复制过程中的权限设置、操作细节或者系统安全机制导致的,咱们一步步来解决:

先排查最容易忽略的操作细节

首先确认你切换用户时的命令是否正确:

  • 如果你用的是 su 用户名,切换后会停留在当前root的工作目录,并不会自动进入普通用户的家目录,这时候你当然看不到~/.ssh下的文件。
  • 正确的切换命令应该是 su - 用户名(带横杠),这样会加载用户的环境变量并直接进入其家目录,之后再执行 ls -la .ssh/ 看看文件是否存在。

检查文件权限与所有权

直接复制root的.ssh文件夹容易导致权限继承问题,哪怕你修改了所有权,可能还有权限位不对的情况:

  1. 在root账户下,先确认目标用户的.ssh目录及文件权限:
    ls -la /home/目标用户名/.ssh/
    
    正常情况下,.ssh目录权限应该是700(只有所有者能读写执行),密钥文件id_rsa权限是600(只有所有者能读写),公钥id_rsa.pub权限是644(所有者读写,其他人只读)。
  2. 如果权限不对,重新设置:
    # 修正目录权限
    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上下文不正确,普通用户可能无法访问:

  1. 在root下对比root和普通用户密钥文件的SELinux上下文:
    ls -Z /root/.ssh/id_rsa
    ls -Z /home/目标用户名/.ssh/id_rsa
    
  2. 如果上下文不一致,修复普通用户目录的SELinux上下文:
    restorecon -Rv /home/目标用户名/.ssh/
    

检查文件隐藏属性

如果上述步骤都没用,看看文件是否被设置了不可变属性:

  1. 在root下查看文件属性:
    lsattr /home/目标用户名/.ssh/id_rsa
    
  2. 如果输出中有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:39