在Git Windows中向SSH-Agent添加SSH密钥

3
我正在尝试在Windows上通过PowerShell将SSH密钥添加到Git SSH代理中。然而,当我添加时,它会将其添加到常规SSH代理而不是Git代理。我阅读了 stackoverflow答案,并使用不同的SSH代理。我尝试启动代理运行C:\Program Files\Git\cmd> .\start-ssh-agent.cmd,它能够正常启动,但是当我尝试执行任何ssh-add命令时,我会收到以下错误消息:

无法连接代理:没有这样的文件或目录

我找到的所有文档都是关于将密钥添加到.ssh文件中,然后启动ssh代理。是否有一种方法可以在Git SSH代理中获取该目录外的文件?

Git只是“运行”ssh,所以通常使用系统的ssh与Git一起使用,这样系统的ssh-agent也能正常工作。我不使用Windows,所以不确定何时尝试在此设置一个完全独立的生态系统可能是合理的。 - undefined
Git在Windows上确实有自己的系统,我认为这是因为它在Windows之前就被创建了,而Windows本身并没有原生支持SSH。 - undefined
2个回答

5

这个问题中,我能够找到一个方法可以通过运行以下命令将git更改为使用Windows SSH代理:git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"


1
另一个选择(如果您不使用现代的慢速肥胖版本的Windows)是将start-ssh-agent.cmd添加到启动项,并使其适用于所有shell。可以通过将其放置在您的.ssh目录中,创建到启动文件夹的符号链接(带有最小化运行选项),并对其应用以下补丁来实现这一点:
--- "C:\\Program Files\\Git\\cmd\\start-ssh-agent.cmd"  2023-06-01 16:34:16.000000000 +0300
+++ start-ssh-agent.cmd 2023-08-09 00:31:44.304425700 +0300
@@ -25,6 +25,7 @@
     @FOR %%s IN ("!SSH_AGENT!") DO @SET BIN_DIR=%%~dps
     @FOR %%s in ("!BIN_DIR!") DO @SET BIN_DIR=!BIN_DIR:~0,-1!
     @FOR /D %%s in ("!BIN_DIR!\ssh-add.exe") DO @SET SSH_ADD=%%~s
+    @FOR /D %%s in ("!BIN_DIR!\cygpath.exe") DO @SET CYGPATH=%%~s
     @IF NOT EXIST "!SSH_ADD!" @GOTO ssh-agent-done
     @REM Check if the agent is running
     @FOR /f "tokens=1-2" %%a IN ('tasklist /fi "imagename eq ssh-agent.exe"') DO @(
@@ -77,9 +78,11 @@
 :failure
 
 @ENDLOCAL & @SET "SSH_AUTH_SOCK=%SSH_AUTH_SOCK%" ^
-          & @SET "SSH_AGENT_PID=%SSH_AGENT_PID%"
+          & @SET "SSH_AGENT_PID=%SSH_AGENT_PID%" ^
+          & @SET "CYGPATH=%CYGPATH%"
 
-@ECHO %cmdcmdline% | @FINDSTR /l "\"\"" >NUL
-@IF NOT ERRORLEVEL 1 @(
-    @CALL cmd %*
+@for /f %%c in ('"%CYGPATH%" -m %SSH_AUTH_SOCK%') do @(
+    @setx SSH_AUTH_SOCK "%%c" > nul
+    @set "SSH_AUTH_SOCK=%%c"
 )
+@setx SSH_AGENT_PID %SSH_AGENT_PID% > nul

这样,你就可以在每个可用的shell中获得SSH_AUTH_SOCK。在该文件的底部,你可以添加任何你的ssh-add命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接