如何使用 Microsoft 的 OpenSSH 让 ssh-add 识别正在运行的 ssh-agent 服务?

RNa*_*are 5 windows ssh openssh windows-10

ssh-add在尝试完成更复杂的任务(涉及用于 SSH 身份验证的硬件安全密钥和 GPG 密钥)的过程中,我在 Windows 10 计算机上遇到了一个脾气暴躁的实用程序。很简单,我的ssh-add无法连接到代理,而所有其他 ssh 功能都工作正常。

当我ssh-add -L在 Powershell 7.0.3 上运行时,我得到以下输出:

Error connecting to agent: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,我的ssh-agent服务似乎运行得很好:

C:\Users\[me]> get-service ssh-agent

Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

C:\Users\[me]> get-service ssh-agent | select *

UserName            : LocalSystem
Description         : Agent to hold private keys used for public key authentication.
DelayedAutoStart    : False
BinaryPathName      : C:\WINDOWS\System32\OpenSSH\ssh-agent.exe
StartupType         : Automatic
Name                : ssh-agent
RequiredServices    : {}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : True
DisplayName         : OpenSSH Authentication Agent
DependentServices   : {}
MachineName         : .
ServiceName         : ssh-agent
ServicesDependedOn  : {}
StartType           : Automatic
ServiceHandle       :
Status              : Running
ServiceType         : Win32OwnProcess
Site                :
Container           :


C:\Users\[me]> get-command ssh-add

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     ssh-add.exe                                        7.7.2.1    C:\WINDOWS\System32\OpenSSH\ssh-add.exe
Run Code Online (Sandbox Code Playgroud)

此外,我的标准公共/私有 SSH 密钥对位于默认位置 ( C:\Users\[me]\.ssh\id_rsaC:\Users\[me]\.ssh\id_rsa.pub)。我在 GitHub 上广泛使用了这个密钥,ssh它在 Powershell 中仍然可以正常工作:

C:\Users\[me]> ssh -T git@github.com
Enter passphrase for key 'C:\Users\[me]/.ssh/id_rsa':
Hi [me]! You've successfully authenticated, but GitHub does not provide shell access.
Run Code Online (Sandbox Code Playgroud)

那么,鉴于 OpenSSH 的所有其他方面似乎都工作正常,为什么会ssh-add出现行为不当呢?

我尝试修复它的事情:

  • 从我的 PATH 中删除其他 SSH 实用程序(例如,通过 Git 安装添加的实用程序)。
  • 禁用/重新启用 Windows 可选功能“SSH 客户端”(及其对应的“SSH 服务器”,我认为我不需要)。
  • 通过 Chocolatey ( https://chocolatey.org/packages/openssh )安装更新版本的 OpenSSH ,并通过 PATH 修改将所有命令指向该安装。
  • 备份并删除我的.ssh文件夹,生成新密钥(通过ssh-keygen),然后从头开始。
  • ssh-agent在自动、手动和禁用之间更改服务的启动类型

上述活动似乎都没有任何效果。所有其他ssh工具都工作正常(假设启用了可选功能并且服务正在运行),但ssh-add事实并非如此。

其他人对于诊断这个烦人的实用程序还有哪些其他建议?

RNa*_*are 2

事实证明,就我而言,我的 PowerShell/Cmd 环境中有一个过时的环境变量SSH_AUTH_SOCK. 它指向一个不存在的套接字/管道,这导致ssh-add实用程序(正确地)抱怨“没有这样的文件或目录”。

ssh-add只需完全删除环境变量就可以实现无错误运行的技巧:

C:\Users\[me]> Get-Item Env:\SSH_AUTH_SOCK

Name                           Value
----                           -----
SSH_AUTH_SOCK                  \\.\pipe\this-socket-never-existed

C:\Users\[me]> Remove-Item Env:\SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)

现在,我之所以SSH_AUTH_SOCK首先进行设置,是因为我想在我的硬件安全密钥 (Yubikey) 和 Windows 10 本机 OpenSSH 代理之间建立一座桥梁。就我而言,我尝试(但失败了)让 Benpye 的WSL SSH Pageant在启动时运行。

但是,当程序实际上按照文档建议运行时:

C:\Users\[me]> wsl-ssh-pageant.exe --winssh ssh-pageant

C:\Users\[me]> $Env:SSH_AUTH_SOCK = "\\.\pipe\ssh-pageant"
Run Code Online (Sandbox Code Playgroud)

我发现它不仅ssh-add运行没有错误,而且在查询时它还能识别并使用我的 Yubikey 的公共身份验证密钥。

C:\Users\[me]> ssh-add -L
ssh-rsa [key]
Run Code Online (Sandbox Code Playgroud)

所以,TL;DR 是我对过时的环境变量的疏忽导致了ssh-add“文件未找到”错误的终止。