更换固态硬盘重装系统复制SSH文件夹后git pull报错排查方案
配置读取状态验证方法
执行带verbose参数的SSH测试命令即可确认配置是否被加载:ssh -vT git@<你的GitLab域名>
查看命令输出:
- 如果输出中存在
Reading configuration data <你的用户目录>/.ssh/config的日志,且后续打印了对应GitLab地址配置的Host、Port参数,说明配置已被读取 - 如果输出中没有对应配置加载记录,或连接端口显示为异常的65535,说明配置未被SSH客户端正常识别加载
你之前的猜测不成立:不是Git完全没读配置,是SSH客户端在加载配置阶段因为异常跳过了有效配置,才走了错误的连接逻辑。
问题根本原因
重装系统后直接复制旧.ssh文件夹触发该报错,核心原因有两个:
- 文件权限不符合SSH安全校验规则:OpenSSH客户端对.ssh目录、内部私钥、config文件的权限有强制要求,权限过宽(比如所有用户都可读)时,客户端会直接判定文件不安全,拒绝加载对应配置和私钥,转而走默认连接逻辑
- 目录路径不匹配:如果新系统的用户名、家目录路径和旧系统不一致,你复制的.ssh文件夹不在SSH默认查找的路径下,客户端根本找不到配置文件
修复步骤
按顺序操作即可解决问题:
- 确认.ssh目录路径正确
终端执行echo ~/.ssh,输出的路径就是SSH默认查找配置的路径,把你复制的SSH文件夹整体移动到该路径下,确保文件夹名是.ssh - 修正文件权限
macOS/Linux系统依次执行以下命令修正权限:
Windows系统右键点击.ssh文件夹,打开「属性-安全」,删除当前用户以外的所有用户权限,给当前用户授予完全控制权限即可chmod 700 ~/.ssh chmod 600 ~/.ssh/config chmod 600 ~/.ssh/id_rsa # 如果你用的是其他名字的私钥,替换成对应文件名 chmod 644 ~/.ssh/*.pub - 校验配置文件内容
打开~/.ssh/config文件,确认里面配置的GitLab地址、端口、私钥路径都是新系统下的有效路径,不存在旧系统的盘符、旧用户名目录等无效路径 - 连接验证
再次执行ssh -vT git@<你的GitLab域名>,如果输出Welcome to GitLab, @<你的用户名>!,说明SSH连接正常,此时执行git pull即可正常拉取代码
附原报错信息:
Network error: Connection timed out
Connection closed by UNKNOWN port 65535
kex_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists
内容的提问来源于stack exchange,提问作者wdm_wcy
相关产品推荐
相关产品推荐

