我遇到过这样的情况:我的 Linux 桌面上有一个在 VirtualBox 下运行的 Windows 10 虚拟机。该虚拟机(目前只有该虚拟机)可以建立到远程办公室的 VPN 隧道。
我目前有一个小型树莓派 - 目前位于我的本地网络上,我定期从我的 Linux 桌面 ssh 进入它,并且我也可以,一旦 ssh 进入,可以从 pi 回到我的 Linux 桌面进行拉取一个 git 存储库。我还可以从我的 Windows 机器 ssh 到 pi(使用 git bash)。
这意味着 linux 和 pi 都运行 sshd,但 windows 不运行
我很快就会将 pi 移动到这个远程办公室,并且我想设置一个可以通过 ssh 往返于这个位置的 pi 和我的 Linux 桌面的环境。
所以我的想法是使用Windows客户端建立一个ssh隧道。因此,作为一个实验,仍然是在我的 Windows 机器上的本地环境中进行的
ssh -L 9001:pi:22 pi@pi
(对于本例,pi 也是 pi 上的本地用户)。我假设这会将流量从端口 9001 转发到 pi 上的 sshd 服务器。
然后在我的 Linux 桌面上,我ssh -l pi -p 9001 win
期望现在可以 ssh 进入 pi。
但它只是挂了。
我究竟做错了什么?
答案1
你能成功地ssh -l pi -p 9001 win
从你的windows盒子里做吗?如果你尝试呢ssh -l pi -p 9001 127.0.0.1
?
如果您可以执行后者,但无法在 Linux 机器上执行相同的操作,则问题可能是您仅在本地监听端口 9001。请查看 ssh 的手册页,特别是-L [bind_address:]port:host:hostport
.要在公共端侦听端口 9001,您可以按如下方式设置隧道:ssh -L *:9001:pi:22 pi@pi
。
答案2
如果我没看错的话,您想通过主机 B 上运行的 SSH 守护进程从主机 A 到主机 C 进行 SSH 吗?
.ssh/config
这可以通过主机 A 上的文件中的一些小技巧来完成:
Host hostc
HostName hostb
ProxyCommand ssh username@hostc nc %h %p 2>/dev/null
.ssh/config
通过主机 A 上的此节,您可以ssh hostc
并且将通过主机 B 上的连接进行代理。
如果主机 A 是你的 Windows 机器,cygwin 的 openSSH 客户端可以做到这一点;我不知道如何在 PuTTY 等中复制此内容。