VirtualBox 似乎破坏了我的 SSH ProxyCommand...详细信息如下:
我想通过 SSH(反向)隧道打开从笔记本电脑到台式机的 SSH 连接。我想使用 ProxyCommand (和 netcat)一步完成此操作。当从我的笔记本电脑上安装的操作系统运行时它可以工作。当从我的笔记本电脑上的 VirtualBox 来宾运行时,它会失败。
我的正常设置是 Kubuntu 12.04 在桌面上的 VirtualBox 中运行,而 Kubuntu 12.04 直接安装在我的笔记本电脑上。这很好用。
但是,如果我尝试在笔记本电脑上使用 Kubuntu 12.04 VirtualBox 实例执行完全相同的操作,则会失败,我将在下面详细说明。
我的 SSH 隧道如下所示:
laptop--->nat--->middleman<--nat<--desktop
无论我是否使用 VirtualBox,台式机和笔记本电脑都运行 Kubuntu 12.04;中间人是Ubuntu 8.04。
我将更详细地描述我的 SSH 隧道。关于这条腿:
middleman<--nat<--desktop
...它的建立方式如下:
autossh -M 5234 -N -f -R 1234:localhost:22 [email protected]
该部分是自动且无故障的。
从笔记本电脑:
laptop--->nat--->middleman
在所有条件下,我都可以通过两步连接到中间人,然后从中间人连接到桌面:
me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman
admin@middleman:~$ ssh -i ~/.ssh/id_rsa localhost -p 1234
为了一步完成此操作,我在中间人上使用 netcat (“nc”),并在笔记本电脑上编辑 SSH 配置文件以使用 ProxyCommand 和 nc:
me@laptop:~/.ssh$ nano config
内容是:
Host family_desktops
ProxyCommand ssh middleman_fqdn nc localhost %p
User admin
PasswordAuthentication no
IdentityFile ~/.ssh/my_id_rsa
middleman_fqdn
“middleman.com”在哪里
然后我只需一步连接到“桌面”:
me@laptop:~$ ssh family_desktops -p 1234
问题就在这里。当直接从我的笔记本电脑(安装了 Kubuntu 12.04)运行时,这是有效的。但是,当我在笔记本电脑上从 Kubuntu 12.04(来宾)的 VirtualBox 实例运行它时,它不起作用。 SSH 要求中间人提供密码。没有设置密码,所以无法连接。
奇怪的是,运行两个单独的命令允许我连接到我的桌面,并且不需要密码。该ssh -vvv
选项没有显示任何错误,也没有任何帮助。
我一整天都在进行故障排除,但我找不到 VirtualBox 实例和笔记本电脑上的主机操作系统之间的设置有任何差异。我使用完全相同的 id_rsa 密钥(公共和私有)、相同的用户,并且中间人服务器上的 auth.log 表明它在两种情况下看到相同的 IP 地址。
那么为什么在我的笔记本电脑上运行 VirtualBox 会让这个 SSH 隧道停止工作(至少在一步中工作)?
答案1
看来这是我的问题:
Bug #201786“ssh 代理承认无法使用密钥进行签名...”:Bug:“gnome-keyring”包:Ubuntu https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/201786
为了解决我的问题,我所做的就是ssh-add
在笔记本电脑上运行的 VirtualBox 实例上运行:
ssh-add ~/.ssh/my_other_key
这是评论中提到的解决方案:
https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/201786/comments/58
我不明白为什么这些问题只在运行 VirtualBox 时出现,但由于有些人认为它与字节顺序有关,也许这以一种非常模糊的方式解释它。无论如何,这对我来说已经解决了。