git push上的SSH“没有这样的文件或目录”错误

Posted

技术标签:

【中文标题】git push上的SSH“没有这样的文件或目录”错误【英文标题】:SSH "no such file or directory" error on git push 【发布时间】:2021-11-22 17:50:49 【问题描述】:

我有一个位于~/.ssh/github_rsa 的私钥,对应的公钥已经上传到我的 Github 帐户。我创建了一个存储库并将其设置为我正在使用的目录的远程,在该目录的.git 文件夹中,我有以下config 文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    sshCommand = 'ssh -i ~/.ssh/github_rsa -o IdentitiesOnly=yes'
[remote "repoName"]
    url= git@github.com:myusername/repoName.git
    fetch = +refs/heads/*:refs/remotes/repoName/*

当我运行git push -u repoName main 时,我收到以下错误:

'ssh -i ~/.ssh/github_rsa -o IdentitiesOnly=yes': line 1: ssh -i github_rsa -o IdentitiesOnly=yes: No such file or directory
fatal: Could not read from remote repository.

删除-o IdentitiesOnly=yes 无效。将密钥的权限从 600 更改为 400 也没有效果。该文件确实存在,并且恰好存在于该路径中。

【问题讨论】:

【参考方案1】:

gitconfig 不识别单引号。使用双引号。

[core]
    sshCommand = "ssh -i ~/.ssh/github_rsa -o IdentitiesOnly=yes"

【讨论】:

谢谢。无论出于何种原因,我在网上找到的每个示例都使用单引号,但这解决了问题。 @user242007:可能这些示例是为使用 sh/bash 运行 git config 的人编写的,以 set 这些,期望配置文件最终没有完全引用它(在这里也可以)。实际上,您说服 Git 尝试运行一个名为 ssh -i ~/.ssh/... 的命令(都是一个大词),而不是运行带有参数 -i、身份文件路径等的命令 ssh 更典型的做法是使用 ssh 配置本身来设置您希望传递给特定主机的一个或多个身份,而不是在命令行中使用 -i-o 选项,因为这可以与其他 ssh 命令一起使用(然后您可以运行 ssh -Tv git@github.com 进行测试,而不需要 -i-o 选项)。

以上是关于git push上的SSH“没有这样的文件或目录”错误的主要内容,如果未能解决你的问题,请参考以下文章

git pull 上的 OSX 10.10 yosemite beta:git-sh-setup:没有这样的文件或目录

气流 SSH 操作错误:[Errno 2] 没有这样的文件或目录:

“openssl/ssl.h:没有这样的文件或目录”在安装 Git 期间

ssh不工作,muxserver_listen bind():没有这样的文件或目录[关闭]

通过 Python 脚本调用 ProxyCommand 时“没有这样的文件或目录”

Windows 上的 Git Bash - 致命:无法创建“C:/Users/scharko00/Documents/GitHub/myProject/.git/index.lock”:没有这样的文件