手动迁移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.comHi username! You've successfully authenticated, but GitHub does not provide shell access.的信息,说明密钥已经生效了。 - 如果是自己的服务器,执行:
如果能直接登录不用输密码,就没问题。ssh your-username@your-server-ip
4. 检查SSH代理是否加载了密钥
如果权限都对,但还是连接失败,可能是SSH代理没加载你的私钥:
- 先查看已加载的密钥:
如果看不到你的私钥ID,就手动加载:ssh-add -l
(如果你的私钥不是默认的ssh-add ~/.ssh/id_rsaid_rsa,换成对应的文件名即可) - 要是想每次登录自动加载密钥,可以把上面的
ssh-add命令加到你的shell配置文件里,比如~/.bashrc或~/.zshrc,保存后重启终端或者执行source ~/.bashrc生效。
5. 检查.ssh/config配置(如果有)
如果你的.ssh目录里有config文件,确认里面的配置是否正确:
- 比如
IdentityFile项的路径是不是指向你当前的私钥文件,有没有拼写错误; Host配置的别名和目标服务器是否匹配。
完成这些步骤后,再试试git clone,应该就能正常访问了。
内容的提问来源于stack exchange,提问作者tanbog
相关产品推荐
相关产品推荐

