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

手动迁移SSH密钥:Linux重装后密钥恢复及权限拒绝问题解决

解决迁移.ssh文件夹后Git/SSH权限拒绝的问题

这个问题我碰到过好多次了——直接复制.ssh文件夹后权限不对是最常见的原因,SSH对文件权限的要求特别严格,稍微放宽一点就会拒绝使用密钥。按下面的步骤一步步来,应该就能解决:

1. 修复.ssh目录和密钥文件的权限

Linux下SSH会拒绝使用权限过于开放的密钥文件,必须严格设置:

  • 设置.ssh目录权限为700(只有所有者能读、写、执行):
    chmod 700 ~/.ssh
    
  • 设置私钥文件(比如id_rsa)权限为600(只有所有者能读、写):
    chmod 600 ~/.ssh/id_rsa
    
  • 公钥文件(比如id_rsa.pub)可以设置为644(所有者读写,其他用户只读):
    chmod 644 ~/.ssh/id_rsa.pub
    
  • 如果~/.ssh里有known_hosts或config文件,权限设置为644(config文件用600也可以,更严格):
    chmod 644 ~/.ssh/known_hosts
    chmod 600 ~/.ssh/config
    

2. 确认文件的所有者和组

如果是用root用户复制的文件夹,或者跨用户复制,文件的所有者可能不是当前登录用户,需要修正:

chown -R $USER:$USER ~/.ssh

这条命令会递归把.ssh目录下所有文件的所有者和组改成当前用户。

3. 测试SSH连接是否正常

先不要急着用git clone,先测试SSH能不能正常连接到目标服务器/Git仓库:

  • 比如测试GitHub:
    ssh -T git@github.com
    
    如果返回类似Hi username! You've successfully authenticated, but GitHub does not provide shell access.的信息,说明密钥已经生效了。
  • 如果是自己的服务器,执行:
    ssh your-username@your-server-ip
    
    如果能直接登录不用输密码,就没问题。

4. 检查SSH代理是否加载了密钥

如果权限都对,但还是连接失败,可能是SSH代理没加载你的私钥:

  • 先查看已加载的密钥:
    ssh-add -l
    
    如果看不到你的私钥ID,就手动加载:
    ssh-add ~/.ssh/id_rsa
    
    (如果你的私钥不是默认的id_rsa,换成对应的文件名即可)
  • 要是想每次登录自动加载密钥,可以把上面的ssh-add命令加到你的shell配置文件里,比如~/.bashrc或~/.zshrc,保存后重启终端或者执行source ~/.bashrc生效。

5. 检查.ssh/config配置(如果有)

如果你的.ssh目录里有config文件,确认里面的配置是否正确:

  • 比如IdentityFile项的路径是不是指向你当前的私钥文件,有没有拼写错误;
  • Host配置的别名和目标服务器是否匹配。

完成这些步骤后,再试试git clone,应该就能正常访问了。

内容的提问来源于stack exchange,提问作者tanbog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:01:23