只有 Windows 10 中的“OpenSSH for Windows”ssh-agent 服务内置了持久性,但这是 Microsoft 添加的自定义功能,它之所以有效,是因为 Windows 具有通用的操作系统级数据保护功能——SSH 密钥仍然使用加密您的登录密码——这在 Linux/BSD 世界中根本不通用。
(同样,完整版的 Ubuntu(带有图形界面)将 ssh-agent 替换为 GNOME Keyring,这是一种密码存储服务(类似于 Windows 中的“凭据管理器”),并使用存储在密钥环。这可能在 WSL2 中不起作用。)
标准 OpenSSH
ssh-agent
确实没有持久性。问题是它没有地方可以安全地存储解密的密钥。(如果将它们存储在磁盘上,那将不会比您已经拥有的密钥文件更好。)只有 Windows 10 中的“OpenSSH for Windows”ssh-agent 服务内置了持久性,但这是 Microsoft 添加的自定义功能,它之所以有效,是因为 Windows 具有通用的操作系统级数据保护功能——SSH 密钥仍然使用加密您的登录密码——这在 Linux/BSD 世界中根本不通用。
(同样,完整版的 Ubuntu(带有图形界面)将 ssh-agent 替换为 GNOME Keyring,这是一种密码存储服务(类似于 Windows 中的“凭据管理器”),并使用存储在密钥环。这可能在 WSL2 中不起作用。)
所以是的,您应该在每次计算机启动时启动 ssh-agent 并将密钥加载到其中。例如,您可以在 WSL-Ubuntu 中调整 ~/.profile 以自动加载密钥(您仍然会收到密码提示,只是不需要运行 ssh-add)——有几篇关于这样做的帖子。
GnuPG gpg-agent 可以配置为模拟 ssh-agent 但具有持久性 - 尽管它仍然依赖于其他东西来记住重启时的密码(例如前面提到的 GNOME 密钥环),因此在 WSL 中它只会为您节省需要最多跑
ssh-add
。GitHub 上有一些项目将所有签名请求桥接到在WSL之外运行的 SSH 代理,例如 Linux 'ssh' 认为它正在与 Linux ssh-agent 对话,但它实际上是在与Windows ssh-agent 对话,或者甚至是 PuTTY 的选美大赛。
我相信 OP 只是希望能够
ssh
使用公钥访问他们的 WSL2 实例,即在连接时不必输入用户密码。这可以使用
C:\ProgramData\ssh
Windows 文件系统中的目录(假设是管理用户)(而不是像通常在 Ubuntu 上那样的 ~/.ssh)。此处概述了说明:
https
: //docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement(假设您已安装 Open-SSH 并使用 WSL2 运行)
管理和“普通”用户帐户的步骤略有不同。
它本质上与在 Ubuntu 上设置 authorized_keys 文件相同,但它位于 Windows FS 中,并且在文件名后附加了“administrative_”。
* 注意:“普通”用户的目录和文件名是不同的。