无法使用Git for Windows从私有仓库进行git克隆
請問意思是什麼?
在 PowerShell 中,使用 ssh -T git@github.com 能够成功,但从 git 命令中使用 ssh 则失败。
详细来说…
我执行了在GitHub和SSH上进行通信所需的最基本操作。
ssh-keygenによりC:\Users\{User}\.ssh以下に鍵を作成.
公開鍵をGitHubに登録
.ssh以下にconfigファイルを作成
$HOME環境変数にC:\Users\{User}を設定することでssh -T git@github.comが成功することを確認.
当使用git命令执行ssh的git clone、git push等命令时,可能会出现以下错误。
PS C:\Users\{user}\projects> git clone git@github.com:*****/{private_repository}.git
Cloning into '{private_repository}'...
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+*************.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Could not create directory '/home/{user}/.ssh' (No such file or directory).
Failed to add the host to the list of known hosts (/home/{user}/.ssh/known_hosts).
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.
仔细看,虽然已经设置了$HOME环境变量,但是路径指定却像Linux一样指向了/home/{user}/.ssh。
因此,git无法识别主目录,并且无法查看主目录下的.ssh目录。因此无法找到known_hosts或密钥,导致克隆失败。
解决方案 (jiě jué cè)
使用 Git Bash
我可以在Git Bash中输入”where ssh”命令,或在PowerShell中输入”gcm ssh”命令来查找ssh命令执行的文件路径。在我的情况下,路径如下:
-
- git bash: C:\Program Files\Git\usr\bin\ssh.exe
- PowerShell: C:\Windows\System32\OpenSSH\ssh.exe
似乎git bash默认使用git的ssh而不是OpenSSH。虽然可能可以在安装时进行更改设置,但现在还没有进行调查。因此,使用git bash无法成功执行ssh -T git@github.com的命令。
参考下列步骤,在C:\Users\{User}下创建.bash_profile文件,并添加PATH=”/c/Windows/System32/OpenSSH:${PATH}”的内容以修改环境变量,使得在使用ssh命令时,优先加载OpenSSH。
通过这个方法,确认在git bash中执行ssh -T git@github.com成功。而且还可以使用ssh来完成git clone和git push。
修改gitconfig
请在以下位置之一添加以下内容:C:\Users\{User}\.gitconfig或者C:\Program Files\Git\etc\gitconfig(如果您不想修改系统级别的配置文件,请注意这是不推荐的)。
[core]
sshCommand = C:/Windows/System32/OpenSSH/ssh.exe
通过这个方法,可以改用OpenSSH而不是git的ssh,从而实现使用ssh进行git clone和git push。
参考:
环境
-
- Windows10
-
- PowerShell
version 5.1.19041.3031
git for windows
git version 2.41.0.windows.3
ssh
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2