我发现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配置文件?
答案 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启动时立即运行它。