在PowerShell中重用SSH代理

时间:2012-11-06 04:10:22

标签: powershell ssh

我发现an article显示了如何在多个命令行窗口中重用SSH代理。这很棒,但是我使用的是PowerShell,并且非常糟糕。

有没有办法从我的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配置文件?

1 个答案:

答案 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文件中,然后你可以运行Start-SSHAgent(或者你可以将它从函数中删除,以便在powershell启动时立即运行它。