64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Batchfile
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Batchfile
		
	
	
	
	
	
@REM Do not use "echo off" to not affect any child calls.
 | 
						|
 | 
						|
@REM The goal of this script is to simplify launching `ssh-pageant` at
 | 
						|
@REM logon, typically by dropping a shortcut into the Startup folder, so
 | 
						|
@REM that Pageant (the PuTTY authentication agent) will always be
 | 
						|
@REM accessible. No attempt is made to load SSH keys, since this is
 | 
						|
@REM normally handled directly by Pageant, and no interactive shell
 | 
						|
@REM will be launched.
 | 
						|
@REM 
 | 
						|
@REM The `ssh-pageant` utility is launched with the `-r` (reuse socket)
 | 
						|
@REM option, to ensure that only a single running incarnation (per user)
 | 
						|
@REM will be required... instead of launching a separate process for
 | 
						|
@REM every interactive Git Bash session. A side effect of this selection
 | 
						|
@REM is that the SSH_AUTH_SOCK environment variable *must* be set prior
 | 
						|
@REM to running this script, with the value specifying a unix-style socket
 | 
						|
@REM path, and needs to be consistent for all git-related processes. The
 | 
						|
@REM easiest way to do this is to set a persistent USER environment
 | 
						|
@REM variable, which (under Windows 7) can be done via Control Panel
 | 
						|
@REM under System / Advanced System Settings. A typical value would look
 | 
						|
@REM similar to:
 | 
						|
@REM
 | 
						|
@REM    SSH_AUTH_SOCK=/tmp/.ssh-pageant-USERNAME
 | 
						|
@REM
 | 
						|
 | 
						|
@REM Enable extensions, the `verify` call is a trick from the setlocal help
 | 
						|
@VERIFY other 2>nul
 | 
						|
@SETLOCAL EnableDelayedExpansion
 | 
						|
@IF ERRORLEVEL 1 (
 | 
						|
    @ECHO Unable to enable extensions
 | 
						|
    @GOTO failure
 | 
						|
)
 | 
						|
 | 
						|
@REM Ensure that SSH_AUTH_SOCK is set
 | 
						|
@if "x" == "x%SSH_AUTH_SOCK%" @(
 | 
						|
    @ECHO The SSH_AUTH_SOCK environment variable must be set prior to running this script. >&2
 | 
						|
    @ECHO This is typically configured as a persistent USER variable, using a MSYS2 path for >&2
 | 
						|
    @ECHO the ssh-pageant authentication socket as the value. Something similar to: >&2
 | 
						|
    @ECHO. >&2
 | 
						|
    @ECHO    SSH_AUTH_SOCK=/tmp/.ssh-pageant-%USERNAME% >&2
 | 
						|
    @GOTO failure
 | 
						|
)
 | 
						|
 | 
						|
@REM Start ssh-pageant if needed by git
 | 
						|
@FOR %%i IN ("git.exe") DO @SET GIT=%%~$PATH:i
 | 
						|
@IF EXIST "%GIT%" @(
 | 
						|
    @REM Get the ssh-pageant executable
 | 
						|
    @FOR %%i IN ("ssh-pageant.exe") DO @SET SSH_PAGEANT=%%~$PATH:i
 | 
						|
    @IF NOT EXIST "%SSH_PAGEANT%" @(
 | 
						|
        @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!\usr\bin\ssh-pageant.exe") DO @SET SSH_PAGEANT=%%~s
 | 
						|
        @IF NOT EXIST "!SSH_PAGEANT!" @GOTO ssh-pageant-done
 | 
						|
    )
 | 
						|
)
 | 
						|
 | 
						|
@REM Time to make the donuts!
 | 
						|
@ECHO Starting ssh-pageant...
 | 
						|
@FOR /f "usebackq tokens=1 delims=;" %%o in (`"%SSH_PAGEANT%" -qra %SSH_AUTH_SOCK%`) DO @ECHO %%o
 | 
						|
 | 
						|
:ssh-pageant-done
 | 
						|
:failure
 |