Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

cmd: Add a .bat file that attempts to authorize SSH keys with ssh-agent

If double clicked on from explorer it will start a new command prompt but
invoking the script from a current command prompt just adds the ssh keys
to the prompt.
  • Loading branch information...
commit b0657b18d23e279a641dc392c5dc9a49129b3d0f 1 parent 40564c4
@mattyclarkson mattyclarkson authored
Showing with 89 additions and 0 deletions.
  1. +89 −0 cmd/start-ssh-agent.cmd
View
89 cmd/start-ssh-agent.cmd
@@ -0,0 +1,89 @@
+@echo off
+
+rem Enable extensions, the `verify other 2>nul` is a trick from the setlocal help
+verify other 2>nul
+setlocal EnableDelayedExpansion
+if errorlevel 1 (
+ echo Unable to enable extensions
+ goto failure
+)
+
+rem Start the ssh-agent if needed by git
+for %%i in ("git.exe") do set GIT=%%~$PATH:i
+if exist "%GIT%" (
+ rem Get the ssh-agent executable
+ for %%i in ("ssh-agent.exe") do set SSH_AGENT=%%~$PATH:i
+ if not exist "%SSH_AGENT%" (
+ for %%s in ("%GIT%") do set GIT_DIR=%%~dps
+ for %%s in ("!GIT_DIR!") do set GIT_DIR=!GIT_DIR:~0,-1!
+ for %%s in ("!GIT_DIR!") do set GIT_ROOT=%%~dps
+ for %%s in ("!GIT_ROOT!") do set GIT_ROOT=!GIT_ROOT:~0,-1!
+ for /D %%s in ("!GIT_ROOT!\bin\ssh-agent.exe") do set SSH_AGENT=%%~s
+ if not exist "!SSH_AGENT!" (
+ goto ssh-agent-done
+ )
+ )
+ rem Get the ssh-add executable
+ 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
+ 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 (
+ echo %%b | findstr /r /c:"[0-9][0-9]*" > nul
+ if "!errorlevel!" == "0" (
+ set SSH_AGENT_PID=%%b
+ )
+ )
+ rem Connect up the current ssh-agent
+ if [!SSH_AGENT_PID!] == [] (
+ echo Removing old ssh-agent sockets
+ for /d %%d in (%TEMP%\ssh-??????*) do rmdir /s /q %%d
+ ) else (
+ echo Found ssh-agent at !SSH_AGENT_PID!
+ for /d %%d in (%TEMP%\ssh-??????*) do (
+ for %%f in (%%d\agent.*) do (
+ set SSH_AUTH_SOCK=%%f
+ set SSH_AUTH_SOCK=!SSH_AUTH_SOCK:%TEMP%=/tmp!
+ set SSH_AUTH_SOCK=!SSH_AUTH_SOCK:\=/!
+ )
+ )
+ if not [!SSH_AUTH_SOCK!] == [] (
+ echo Found ssh-agent socket at !SSH_AUTH_SOCK!
+ ) else (
+ echo Failed to find ssh-agent socket
+ set SSH_AGENT_PID=
+ )
+ )
+ rem See if we have the key
+ "!SSH_ADD!" 1>nul 2>nul
+ set result=!ERRORLEVEL!
+ if not !result! == 0 (
+ if !result! == 2 (
+ echo|set /p=Starting ssh-agent:
+ for /f "tokens=1-2 delims==;" %%a in ('"!SSH_AGENT!"') do (
+ if not [%%b] == [] (
+ set %%a=%%b
+ )
+ )
+ echo. done
+ )
+ set "HOME=%USERPROFILE%"
+ "!SSH_ADD!"
+ echo.
+ )
+)
+
+:ssh-agent-done
+:failure
+
+endlocal & set "SSH_AUTH_SOCK=%SSH_AUTH_SOCK%" ^
+ & set "SSH_AGENT_PID=%SSH_AGENT_PID%"
+
+echo %cmdcmdline% | findstr /l "\"\"" >nul
+if not errorlevel 1 (
+ call cmd %*
+)
+
Please sign in to comment.
Something went wrong with that request. Please try again.