powershell - 在 PowerShell 中重用正在运行的 PuTTY 代理(选美)

标签 powershell ssh putty pageant

PS 5.1 中有没有办法重用 PuTTY 代理 key ?
现在,细节。
enter image description here
要使用 key 代理,需要有一个持有 key 的代理(左框)和委托(delegate)管理 key 的客户端应用程序(右框)。
例如,客户端应用程序 C1= putty可以使用自己的代理 A1= pageant , 当然。
客户端应用程序 C2= winscp知道如何直接使用A1。
某些客户不能直接使用某些代理,但有一些代理可以弥补这一差距。
例如要将 A1 与 C3 一起使用,我需要 Proxy P1= ssh-pageant ,请参见下面的示例。
这有助于将多个客户端的 key 集中在单个代理中。
现在我的意思是为我的所有客户使用 A1(目前,只缺少 A1-C5 和 A1-C6)。
PS 5.1 中有没有办法重用相同的 PuTTY 代理 key ?
(即,使用 A1 和 C5 的代理 Px)
可能有帮助 :
https://superuser.com/a/1173570/245595

备注 :

  • 没试过,好像是 winssh-pageant 是将 A2 与直接了解 A1 的客户端应用程序链接的代理。
  • 我目前正在尝试在 PS 中使用相同的 ssh-pageant从 msys2 (它最终是一个 Windows 程序,而且它们经常工作),手动替换什么 eval在 msys2 中执行(到目前为止没有运气,但我认为这是可以修复的):
  •     > cd <dir where ssh-pageant is>
        > .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
        SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
        SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
        echo ssh-pageant pid 714;
        > $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
        > $env:SSH_PAGEANT_PID=714
        > ssh myserver
        Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
    
  • 作为替代解决方法,是否有一种非管理员(我不想干扰它)的方式将 key 加载到单独的代理中,这样当我启动 PS session 时,它会使用其他 key ,这允许我继续使用我重复使用的 key 在 msys2 中?
    这可能相当于同时使用两个不同的代理......
  • weasel-pageant 是这样的代理(基于 Cygwin 的 ssh-pageant ),用于 WSL(A1-C7)...仍在寻找 PS 的解决方案。
  • ssh-agent-wsl
    weasel-pageant 的一个分支这包括支持使用 Microsoft 的 SSH 代理服务(而不是 PuTTY Pageant)持有的 key (A2-C7 ......我想 WSL 需要一个代理来使用 Win OpenSSH 代理是非常了不起的)。

  • 如何使用“代理”代理的示例ssh-pageant将 PuTTY 选美与 Cygwin bash 联系起来
    实现这一目标的步骤是:
  • 当我在 Windows 中启动 session 时,可移植 PuTTY 代理 ( pageant ) 被执行,同时加载一键。
    为此,使用快捷方式 pageant已添加到 C:\Users\USER1\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup , 指向 %myputty%\pageant.exe "%mykeys%\key1.ppk" .

    这使得 PuTTY 和 WinSCP 可以使用 key ,例如
    但是,如果我现在进入 PS session 或 msys2/cygwin 终端,则不会使用 key ,并且会要求我输入 key 的密码。
    所以如果我现在
  •     $ ssh myserver
        Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
    
  • 在 msys2/cygwin 我可以使用 ssh-pageant (“用于 Cygwin/MSYS 的 SSH 身份验证代理,将 OpenSSH 链接到 PuTTY 的选美”),这样它就可以重用之前加载的 PuTTY 代理所拥有的任何 key 。

    为此,我只需添加 eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")给我的~/.bashrc msys2 的。
    现在每当我启动一个 msys2 终端时,PuTTY's Pageant -> ssh-pageant 的链接就会建立,并且会创建几个环境变量,我可以 ssh无需输入密码
  •     $ env | grep -i ssh
        SSH_AUTH_SOCK=/tmp/.ssh-pageant-USER1
        SSH_PAGEANT_PID=960
        $ ssh myserver
        Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-40-generic x86_64)
        ...
    
  • this来看,似乎对于 Git bash 也可以实现。

  • 相关 :
    http://rabexc.org/posts/pitfalls-of-ssh-agents
    How to check if ssh-agent is already running in bash?
    https://superuser.com/questions/1327633/how-to-maintain-ssh-agent-login-session-with-windows-10s-new-openssh-and-powers
    https://superuser.com/questions/1293725/gpg-agent-under-windows-as-ssh-agent-for-git-bash

    最佳答案

    我在 PS session 中使用相同的 Cygwin 工具(即 ssh-pageant 和 Cygwin OpenSSH 客户端)完成了这项工作。
    所以我会这样做(假设 ssh-pageant 已经从 Msys2 运行):

    > cd <dir where ssh-pageant is>
    > .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
    SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
    > $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
    > .\ssh myserver
    Logged in to myserver
    
    我已将此添加到我的 profile.ps1 (同样,当我启动 PS session 时 ssh-pageant 已经运行时,它将起作用)
    $env:MSYS2_DIR=<mydir>
    # Assuming a proxy ssh agent is already running
    $env:SSH_AUTH_SOCK="$env:MSYS2_DIR\tmp\.ssh-pageant-$env:USERNAME"
    # We have to make sure we use Msys2 OpenSSH ssh client, not Windows OpenSSH ssh client 
    function ssh_msys2 {
        & $env:MSYS2_DIR\usr\bin\ssh.exe $args
    }
    

    如果 ssh-pageant尚未激活,这应该可以工作(尚未测试;PID 编号可能不同):
    > cd <dir where ssh-pageant is>
    > .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
    SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
    SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
    echo ssh-pageant pid 714;
    > $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
    > $env:SSH_PAGEANT_PID=714
    > .\ssh myserver
    Logged in to myserver
    
    仍然需要测试几个点,并使操作自动化。

    特别是,执行 ssh-pageant ,检测PID#是否返回,设置环境变量SSH_PAGEANT_PID如果是这样的话,来自PS。
    这比在 Msys2 中要麻烦一些,因为 ssh-pageant吐出一些可由 bash 直接执行的东西。

    关于powershell - 在 PowerShell 中重用正在运行的 PuTTY 代理(选美),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62937020/

    相关文章:

    r - Windows 上的多计算机 makePSOCKcluster : Building a step-by-step guide

    linux - 如何使用 Windows 10 将文件从服务器复制到我的笔记本电脑

    regex - 使用正则表达式在模式中查找文本

    powershell - 调用自定义函数非常慢

    c# - 如何使用 C# 在 PowerShell 中运行 Restart-Computer?

    linux - VSO 通过 SSH 任务复制文件 - 它可以复制到我自己的本地 linux 机器(树莓派)吗?

    mysql - 从 MySQL 导出的 CSV 未出现在指定目录中

    regex - 替换参数,删除不应该删除的空格

    c - 如何拦截 SSH stdin 和 stdout? (不是密码)

    sftp - 将文件传输至 session /从 session 传输文件 我已使用 PuTTY 登录