如何使用 PuTTY 或 SecureCRT 通过网关/代理建立 SSH 隧道到开发服务器?

如何使用 PuTTY 或 SecureCRT 通过网关/代理建立 SSH 隧道到开发服务器?

我们设置了一些 unix 机器,以便通过 ssh 访问开发机器,您必须先通过 ssh 进入“user@jumpoff”机器。除了“jumpoff”之外,不允许通过 ssh 从任何地方直接连接到“dev”。此外,两台服务器只允许密钥交换。并且您始终以“build@dev”的身份登录开发机器。

总是这样跳跃很痛苦。我知道可以用 SOCKS 或 Tunnel 等来实现...

我已经设置了一个 FreeBSD VM,我可以使用 unix ssh 工具让一切运行良好。基本上我所做的就是确保我的 vm 的 ~/.ssh/id_rsa.pub 密钥在 jumpoff 和 dev 上,并使用这个 ~/.ssh/config 文件:

# Development Server
Host            ext-dev  # this must be a resolvable name for "dev" from Jumpoff
Hostname        1.2.3.4
User            build
IdentityFile    ~/.ssh/id_rsa  

# The Jumpoff Server
Host            ext 
Hostname        1.1.1.1
User            daevid
Port            22 
IdentityFile    ~/.ssh/id_rsa

# This must come below all of the above 
Host            ext-* 
ProxyCommand    ssh ext nc $(echo '%h'|cut -d- -f2-) 22 

然后我只需简单地输入“ssh ext-dev”就可以像 Flynn 一样进入。

问题是我无法使用 PuTTY 或 SecureCRT 来实现这一点——老实说,我还没有找到任何真正指导我完成这一过程的教程。我看到很多关于为 Firefox 设置某种代理隧道的文章,但似乎不是同一个概念。我几乎整天都在尝试各种方法,但什么都没用(显然),我的 ssh 知识和 Google 搜索已经用尽了。

我发现这个链接似乎很完美,但对我来说不起作用。“主”连接正常,但“客户端”部分连接不上。它告诉我,远程系统拒绝连接。 http://www.vandyke.com/support/tips/socksproxy.html

我让 VM、PuTTY 和 SecureCRT 都使用相同的公钥/私钥对,以使其一致且更易于调试。

有人能提供在 Windows 中如何执行此操作的直接示例吗?

答案1

使用较新版本的 SecureCRT(本例中我运行的是 7.3.7),操作方法如下:

1.) 建立到跳转服务器 (ext) 的新连接,IP 地址为 1.1.1.1,如示例所示。为该连接命名“跳转服务器”,并将其保存到 Sessions 文件夹中。

2.) 测试您是否可以根据需要连接到跳转服务器。您已指出只能使用 SSH 密钥进行访问:如果您只想输入一次密码,您可能需要使用 ssh-agent 功能导入该密钥(使用“工具”菜单 > “管理代理密钥...” > “添加...”)。

3.) 为您的开发箱设置新连接。与步骤 1.) 一样,使用正确的 IP 地址 - 1.2.3.4(如示例中所示)并将其命名为“开发箱”。将此会话保存在您的 Sessions 文件夹中。测试此连接:它应该此时失败,因为您是直接连接。关闭窗口。

现在您已经拥有了所需的原始信息,但还需要一个额外的步骤,即关联跳转框,因为连接需要经过“跳转框”才能连接到“开发框”。

4.) 右键单击​​ Sessions 文件夹中的“Development box”连接,然后选择“Properties”。转到“Connection”->“SSH2”,然后单击“Firewall:”下拉选项。单击“Select Session...”,然后从 Sessions 菜单中选择“Jump-off server”,然后单击“OK”接受该值,然后再次单击“OK”退出属性菜单。

现在,这会将您的跳转箱与开发箱关联起来,因此在尝试建立与开发箱的连接时,它将用作中介。即使您在跳转箱上使用的 SSH 端口(例如 65000)与开发箱(例如 22)不同,它也能正常工作,因为 SecureCRT 将只使用您为每个主机设置的配置。

再次尝试“开发框”连接,无论是否打开“跳转框”连接,您都应该发现它可以按您想要的方式工作。

答案2

使用 PuTTY,确保您已启用“代理转发”,并且您的私钥已加载到 Pageant 中。

答案3

看来 PuTTY 0.59 及更高版本支持类似 ProxyCommand 的语法;例如,这篇博文。您很可能不想使用 SOCKS。您需要小心为密钥设置强密码;从您的 OpenSSH 示例中无法清楚看出密钥上是否有密码,或者您是否使用了 ssh-agent 或类似的东西。

答案4

对于那些有兴趣使用 SecureCRT 执行此操作的人来说,这里是:

  1. 像往常一样创建 SSH 会话。

  2. 在属性中,选择端口转发并单击添加...,确保选中“使用 SOCKS 4 或 5 动态转发”选项,并相应地填写本地地址和端口。

  3. 完成。从现在开始,每次使用此会话配置进行 ssh 时,都会自动创建一个隧道,断开连接后,隧道就会消失。与 Linux 机器中的情况非常相似。

享受!

相关内容