篇首语:本文由编程笔记#自由互联小编为大家整理,主要介绍了powershell 的ssh-agent-utils.ps1相关的知识,希望对你有一定的参考价值。
# 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 Gits 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 agents 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-SshAgentif ($agent -eq 0) {Write-Host "Starting SSH agent..."Start-SshAgent# Start agentAdd-SshKey# Add my default key} else {Write-Host "SSH agent is running (PID $agent)"}