更新:看起来网络设计完全错误,身份验证流程应该反过来。所以这个问题现在没有意义了。
当前设置:Windows 7 主机上的 Linux VM(假设是常见和最新的,如 CentOS 7.1 和 Ubuntu 15.04),使用 Virtualbox。
TL;DR 问题: 是否可以在虚拟机内运行 openssh不是使用本地 ssh-agent 进行密钥认证,但在 Windows 主机上使用 Peagent 吗?更复杂的设置是可以接受的。
长问题:最初主机和虚拟机上有多个密钥副本 — 主机上有 Putty 格式的密钥,虚拟机上有通过共享文件夹保存的 openssh 密钥格式的密钥,其中许多密钥没有密码保护,以方便使用。但最近我觉得有必要将它们整合起来并增加更多保护。这些密钥用于远程管理和通过版本控制系统(主要是 Git)签出源代码。要求如下:
- Windows 主机可以 ssh 到远程服务器,并且可以通过 ssh 使用 git。
- Linux VM 可以 ssh 到远程服务器,并且可以通过 ssh 使用 git。
- 密钥仅存储在主机上,而不是虚拟机上。(这意味着这不是 ssh 代理转发设置)
第 1 点(允许 Windows 主机使用 pageant 进行身份验证)相对简单;git 设置本质上就是设置正确的$GIT_SSH
环境变量。不仅仅是 Putty,甚至 MinGW openssh 也可以连接到 pageant,方法是将所有密钥存储在密码管理器中(使用 KeePass 2.x)并导出适合使用的$SSH_AUTH_SOCK
套接字KeeAgent 插件。 看这篇 ServerFault 帖子另一种方法。
但到目前为止,通过 Linux VM 访问 pageant 还没有任何成功。我尝试了以下方法但失败了:
- SSH 服务器安装在 Windows 主机上作为中间跳跃(我正在尝试莫巴什但选择并不重要——请继续阅读。
- 然后尝试
plink.exe
在 VM 内执行远程操作。这类似于简单的方法,ssh host1 ssh host2
但对于我的目的来说已经足够了。 - 然而,plink.exe 在 Windows SSH 服务器中运行时无法访问任何密钥。直接在 上运行 plink.exe 即可
cmd
。Windows 上运行的大多数可用 SSH 服务器都基于 Cygwin。看起来与此非常相似putty/cygwin 组合错误报告。
笔记:这里可能有一个类似的问题,但我没有使用 Vagrant。
答案1
看来最初的设计完全错了。在每个虚拟机上打开 sshd 服务器会更简洁
AllowAgentForwarding yes
然后通过 ssh 进入每个虚拟机。这样,所有虚拟机都会自动使用主机的身份验证代理,而无需安装任何 ssh 密钥。