使用simple-git通过SSH克隆仓库出现publickey权限错误如何解决
Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
上述报错本质是SSH公钥认证失败,可按以下步骤排查和解决:
排查步骤
- 先在运行代码的同环境、同用户下执行SSH连通性测试,替换命令中的域名为你使用的Git服务域名:
如果执行后也报同样的权限错误,说明是系统级SSH配置问题,和代码无关,优先检查以下项:ssh -T git@github.com- 检查
~/.ssh目录下是否存在SSH密钥对(默认命名为id_rsa私钥和id_rsa.pub公钥),不存在则执行ssh-keygen -t rsa -b 4096 -C "你的账号邮箱"生成 - 检查公钥
id_rsa.pub的完整内容是否已经添加到Git服务账号的SSH密钥配置中 - 检查本地SSH文件权限是否符合要求:
~/.ssh目录权限为700,id_rsa私钥权限为600,权限过高会导致SSH拒绝读取密钥 - 如果代码运行在容器、CI/CD环境中,确认SSH私钥已经正确挂载到运行环境的
~/.ssh目录下,且权限配置正确
- 检查
- 如果手动测试SSH连通性正常,说明是simple-git运行时没有读取到正确的SSH配置,需要在代码中补充相关配置。
解决方法
方法1:在simple-git初始化时指定SSH配置
修改simple-git初始化逻辑,通过配置项传入SSH命令参数,指定私钥路径即可:
import simpleGit, { SimpleGit, SimpleGitOptions } from 'simple-git'; const options: Partial<SimpleGitOptions> = { baseDir: process.cwd(), binary: 'git', maxConcurrentProcesses: 6, trimmed: false, // 核心配置:指定SSH命令,替换为你自己的私钥路径 config: ['core.sshCommand=ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no'] }; const git: SimpleGit = simpleGit(options); const sshUri = 'git@..........' const localPath = '/usr/workspace'; git .clone( sshUri, localPath ).then((data) => { console.log('success'); }).catch((err) => { console.log(err); });
配置参数说明:
-i ~/.ssh/id_rsa:指定读取的私钥路径,如果你使用自定义命名的密钥,替换为对应的实际路径即可-o StrictHostKeyChecking=no:跳过首次连接时的主机校验提示,避免非交互环境下进程卡住
方法2:全局配置Git的SSH命令(可选)
如果不想在代码中硬编码配置,可在运行代码的用户下执行全局Git配置:
git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no"
配置完成后原有代码无需修改即可正常运行。
特殊场景适配
如果你的Git服务使用非默认22端口,或者同一环境下有多个Git账号对应不同密钥,直接修改SSH命令参数即可:
示例(端口为2222、使用自定义密钥):core.sshCommand=ssh -i ~/.ssh/自定义私钥文件名 -p 2222 -o StrictHostKeyChecking=no
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

