在 WSL 中永久添加 ssh 密钥

在 WSL 中永久添加 ssh 密钥

我对 Linux 还比较陌生。在 WSL2 上使用 Ubuntu。我使用 为 github 添加了一个没有密码的私钥ssh-add。我在整个会话中使用了几次,但第二天我无法连接。当我使用 列出所有密钥时,ssh-add -l没有任何密钥。

我是否应该为每个会话添加密钥或为其创建自动化?或者这是 WSL 的正常(缺乏)持久性行为?

答案1

标准 OpenSSHssh-agent确实没有持久性。问题是它有无处安全存储解密的密钥。(如果将其存储在磁盘上,则不会比您已有的密钥文件更好。)

Windows 10 中只有“OpenSSH for Windows”ssh-agent 服务具有内置持久性,但这是 Microsoft 添加的自定义功能,它之所以有效是因为 Windows 具有通用的操作系统级数据保护功能 - SSH 密钥保持使用您的登录密码加密 - 这在 Linux/BSD 世界中根本不通用。

(同样,满的Ubuntu 版本(带图形界面)用 GNOME Keyring 替换了 ssh-agent,后者是一种密码存储服务(类似于 Windows 中的“凭据管理器”),并使用存储在 Keyring 中的密码自动加载您的 SSH 密钥。这在 WSL2 中可能不起作用。)

所以是的,你应该在每次启动计算机时启动 ssh-agent 并将密钥加载到其中。例如,你可以在 WSL-Ubuntu 中调整 ~/.profile 以自动加载密钥(你仍然会收到密码提示,只是不需要运行 ssh-add)——有几篇关于这样做的帖子。

GnuPG gpg-agent 可以配置为模拟 ssh-agent 但具有持久性 - 尽管它仍然依赖于其他东西来在重启后记住密码(例如前面提到的 GNOME Keyring),因此在 WSL 中它最多只能为您节省运行的需要ssh-add

GitHub 上有几个项目将所有签名请求桥接到运行外部例如,Linux 的 'ssh' 认为它正在与 Linux ssh 代理对话,但实际上它正在与视窗ssh-agent,甚至是PuTTY的Pageant。

答案2

我相信 OP 只是希望能够ssh使用公钥访问他们的 WSL2 实例,即在连接时不必输入用户密码。

这可以使用C:\ProgramData\sshWindows 文件系统中的目录(假设是管理员用户)(而不是像 Ubuntu 上通常使用的 ~/.ssh)。

说明概述如下:
https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement
(假设您已安装 Open-SSH 并与 WSL2 一起运行)

对于管理员和“普通”用户帐户来说,步骤略有不同。

它本质上与在 Ubuntu 上设置 authorized_keys 文件相同,但位于 Windows FS 中,并且在文件名后附加了“administrative_”。


* 注意:对于“普通”用户来说,目录和文件名是不同的。

相关内容