3

我发现一篇文章展示了如何跨多个命令行窗口重用 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 配置文件中呢?

4

1 回答 1

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 启动时运行。

于 2014-07-11T15:04:03.223 回答