Something went wrong. Try again.
dotfiles
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107# 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.
if ($env:COMPUTERNAME -ne 'PC490') { exit}
# 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 agentfunction 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 agentfunction 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)"#}