-
-
Save ajai8085/82aee65364d70e5a14f938187d6ba0ed to your computer and use it in GitHub Desktop.
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
# SSH Agent Functions | |
# Mark Embling (http://www.markembling.info/) | |
# | |
# How to use: | |
# - Place this file into %USERPROFILE%\Documents\WindowsPowershell (or location of choice) | |
# - Import into your profile.ps1: | |
# e.g. ". (Resolve-Path ~/Documents/WindowsPowershell/ssh-agent-utils.ps1)" [without quotes] | |
# - Enjoy | |
# | |
# Note: ensure you have ssh and ssh-agent available on your path, from Git's Unix tools or Cygwin. | |
# Retrieve the current SSH agent PId (or zero). Can be used to determine if there | |
# is an agent already starting. | |
function Get-SshAgent() { | |
$agentPid = [Environment]::GetEnvironmentVariable("SSH_AGENT_PID", "User") | |
if ([int]$agentPid -eq 0) { | |
$agentPid = [Environment]::GetEnvironmentVariable("SSH_AGENT_PID", "Process") | |
} | |
if ([int]$agentPid -eq 0) { | |
0 | |
} else { | |
# Make sure the process is actually running | |
$process = Get-Process -Id $agentPid -ErrorAction SilentlyContinue | |
if(($process -eq $null) -or ($process.ProcessName -ne "ssh-agent")) { | |
# It is not running (this is an error). Remove env vars and return 0 for no agent. | |
[Environment]::SetEnvironmentVariable("SSH_AGENT_PID", $null, "Process") | |
[Environment]::SetEnvironmentVariable("SSH_AGENT_PID", $null, "User") | |
[Environment]::SetEnvironmentVariable("SSH_AUTH_SOCK", $null, "Process") | |
[Environment]::SetEnvironmentVariable("SSH_AUTH_SOCK", $null, "User") | |
0 | |
} else { | |
# It is running. Return the PID. | |
$agentPid | |
} | |
} | |
} | |
# Start the SSH agent. | |
function Start-SshAgent() { | |
# Start the agent and gather its feedback info | |
[string]$output = ssh-agent | |
$lines = $output.Split(";") | |
$agentPid = 0 | |
foreach ($line in $lines) { | |
if (([string]$line).Trim() -match "(.+)=(.*)") { | |
# Set environment variables for user and current process. | |
[Environment]::SetEnvironmentVariable($matches[1], $matches[2], "Process") | |
[Environment]::SetEnvironmentVariable($matches[1], $matches[2], "User") | |
if ($matches[1] -eq "SSH_AGENT_PID") { | |
$agentPid = $matches[2] | |
} | |
} | |
} | |
# Show the agent's PID as expected. | |
Write-Host "SSH agent PID:", $agentPid | |
} | |
# Stop a running SSH agent | |
function Stop-SshAgent() { | |
[int]$agentPid = Get-SshAgent | |
if ([int]$agentPid -gt 0) { | |
# Stop agent process | |
$proc = Get-Process -Id $agentPid | |
if ($proc -ne $null) { | |
Stop-Process $agentPid | |
} | |
# Remove all enviroment variables | |
[Environment]::SetEnvironmentVariable("SSH_AGENT_PID", $null, "Process") | |
[Environment]::SetEnvironmentVariable("SSH_AGENT_PID", $null, "User") | |
[Environment]::SetEnvironmentVariable("SSH_AUTH_SOCK", $null, "Process") | |
[Environment]::SetEnvironmentVariable("SSH_AUTH_SOCK", $null, "User") | |
} | |
} | |
# Add a key to the SSH agent | |
function Add-SshKey() { | |
if ($args.Count -eq 0) { | |
# Add the default key (~/id_rsa) | |
ssh-add | |
} else { | |
foreach ($value in $args) { | |
ssh-add $value | |
} | |
} | |
} | |
# Start the agent if not already running; provide feedback | |
$agent = Get-SshAgent | |
if ($agent -eq 0) { | |
Write-Host "Starting SSH agent..." | |
Start-SshAgent # Start agent | |
Add-SshKey # Add my default key | |
} else { | |
Write-Host "SSH agent is running (PID $agent)" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment