2012-11-06 48 views
3

我發現an article顯示瞭如何跨多個命令行窗口重用SSH代理。這很好,但是我使用PowerShell並且完全吮吸它。在PowerShell中重複使用SSH代理

有沒有辦法從我的PowerShell配置文件中獲得相同的功能?

更新

這裏是基準柱的簡要概述。

開始ssh-agent設置了一堆環境變量。

SSH_AGENT_PID=1784 
SSH_AUTH_SOCK=/tmp/ssh-QzfPveH696/agent.696 

ssh-agent允許您指定套接字文件名。這是帖子建議放在你的~/.bashrc(因爲我使用PowerShell而不可能)。

# If no SSH agent is already running, start one now. Re-use sockets so we never 
# have to start more than one session. 

export SSH_AUTH_SOCK=/home/fboender/.ssh-socket 

ssh-add -l >/dev/null 2>&1 
if [ $? = 2 ]; then 
    # No ssh-agent running 
    rm -rf $SSH_AUTH_SOCK 
    ssh-agent -a $SSH_AUTH_SOCK >/tmp/.ssh-script 
    source /tmp/.ssh-script 
    echo $SSH_AGENT_PID > /home/fboender/.ssh-agent-pid 
    rm /tmp/.ssh-script 
fi 

它集套接字文件,運行ssh-add,如果沒有代理正在運行它清除了一些事情,並設置一個。

那麼我怎樣才能把它變成PowerShell配置文件?

+0

你能創建一個TL;引用的文章的DR版本,並在這裏發佈以方便? – Neolisk

+0

當然,將更新原始帖子。 –

回答

0

我知道這個問題現在已經超級老了,但我已經採取了一個破解它。

假設:

1)SSH-agent.exe是MINGW32版本。

2)ssh-agent.exe在你的powershell路徑中。

 Function Start-SSHAgent{ 
    param(
     [Parameter(Mandatory=$false,ValueFromPipeline=$true)] 
     [string]$socketfile="/p/.ssh-socket",      # Used as input to ssh-agent, which expects POSIX format paths 
     [Parameter(Mandatory=$false)] 
     [string]$pidFile="p:\.ssh-agent-pid"      # Used as input to Out-File which expects Windows format paths 
    ) 
    $env:SSH_AUTH_SOCK=$socketfile 
    $agent_is_running = Get-Process | ? { $_.ProcessName -like "ssh-agent*"} 
    if($agent_is_running -eq $null){ 
     $sshAgentOutput = ssh-agent -a $env:SSH_AUTH_SOCK 
     $parse = Select-String -InputObject $sshAgentOutput -Pattern "(?m)SSH_AGENT_PID=(\d+)" 
     $sshAgentPid = $parse.Matches[0].Groups[1].Value 
     $sshAgentPid | Out-File $pidFile 
     $env:SSH_AGENT_PID = $sshAgentPid 
    } 
} 

丟棄到您的profile.ps1文件,然後你可以運行啓動SSHAgent(或者你可以把它的功能有它始終會運行的PowerShell啓動。