Last active
October 10, 2022 19:29
-
-
Save lukescammell/743bd91cf2da0ed1d2cd699a2fdc3698 to your computer and use it in GitHub Desktop.
This enables portable SSH keys in cmder, enabling you to have full SSH access using cmder portably on a USB (for example). Please note that when you ssh-keygen, it will still default to %USERPROFILE%, so you will either have to change the path on generation, or manually move the keys to your %CMDER_ROOT%\config\.ssh directory.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
:: use this file to run your own startup commands | |
:: use in front of the command to prevent printing the command | |
:: call "%GIT_INSTALL_ROOT%/cmd/start-ssh-agent.cmd" | |
:: set "PATH=%CMDER_ROOT%\vendor\whatever;%PATH%" | |
:: LS 2017-09-12_17.35.11 | |
:: ====================== | |
:: Copied from %CMDER_ROOT%\vendor\init.bat | |
:: Then changed line 61 following line from: | |
:: Find root dir | |
if not defined CMDER_ROOT ( | |
for /f "delims=" %%i in ("%ConEmuDir%\..\..") do set "CMDER_ROOT=%%~fi" | |
) | |
:: Remove trailing '\' | |
if "%CMDER_ROOT:~-1%" == "\" SET "CMDER_ROOT=%CMDER_ROOT:~0,-1%" | |
:: LS 2017-09-12_17.31.42 | |
:: ====================== | |
:: Copied in its entirety from %CMDER_ROOT%\vendor\git-for-windows\cmd\start-ssh-agent.cmd | |
:: Then changed line 61 following line from: | |
:: | |
:: @SET "HOME=%USERPROFILE%" | |
:: | |
:: to: | |
:: @SET "HOME=%CMDER_ROOT%\config" | |
@REM Do not use "echo off" to not affect any child calls. | |
@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 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!\usr\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 | |
) else @( | |
@REM Unset in the case a user kills the agent while a session is open | |
@REM needed to remove the old files and prevent a false message | |
@SET SSH_AGENT_PID= | |
) | |
) | |
@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 | |
@SET "HOME=%CMDER_ROOT%\config" | |
@"!SSH_ADD!" -l 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 | |
) | |
@"!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 %* | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Better yet. Add a symbolic link so that you don't need your ssh keys in two different places.