我在运行 Windows 10 的远程计算机上使用 git over ssh。当我尝试执行 git pull 时,输入凭据后我在标题中收到错误消息。
2 回答
这可以通过GitCredentialManager/git-credential-manager
问题 325来说明
您看到的错误与 Windows 处理“登录会话”和“凭据集”的方式有关。
GCM Core 使用 Windows 凭据管理器 (
wincred.h
) 在 Windows 上安全地存储凭据。
我们通过 Windows API 与 wincred 进行交互:CredRead
、CredWrite
、CredDelete
和CredEnumerate
.在您的情况下返回的错误是 ERROR_NO_SUCH_LOGON_SESSION (0x520) 这意味着:
登录会话不存在或没有与此登录会话关联的凭据集。
网络登录会话没有关联的凭据集。这里的关键部分是粗体。
当您通过 SSH 连接时,sshd 守护程序/Windows 服务作为
NT AUTHORITY\NETWORK SERVICE
帐户运行(很可能/默认情况下),它会在 SSH 客户端连接时创建网络登录会话。通过一些在线搜索,发布的一种解决方法是将 sshd 运行的帐户更改为您的真实用户,然后该帐户将具有关联的凭据集。根据设置,您的里程可能会有所不同。
如果您尝试使用内置 cmdkey 命令与 Windows 凭据管理器中的凭据存储进行交互,您将看到类似的错误或消息,例如“仅为此登录保存”。
升级到最新版本的 GCM附带:
在最新的 GCM Core 版本 (v2.0.567) 中,Windows 支持使用不同于 Windows 凭据管理器的不同凭据存储,它不应该具有相同的远程会话限制。
您可以在此处阅读有关不同选项的更多信息:https ://aka.ms/gcmcore-credstores
可能有助于此 SSH 方案的特定存储是受DPAPI 保护的文件存储。
凭据使用 Windows DPAPI 加密(基于您当前的用户帐户)进行保护,并写入磁盘上的文件(可配置;默认为%USERPROFILE%\.gcm\dpapi_store
)。
通过在 Chocolatey 上安装最新版本的git credential manager(不确定是否有必要)并将我的 git credential store 切换到 dpapi 来修复。
有关如何执行此操作的说明,请参阅https://github.com/GitCredentialManager/git-credential-manager/blob/main/docs/credstores.md#dpapi-protected-files 。