ssh隧道链

时间:2009-06-18 04:45:50

标签: windows ssh tunnel

这是方案

我试图让scp访问server3,但是只有公共ssh访问服务器1.要ssh到server3,我必须ssh到server1,ssh到server2,然后ssh到server3。

我最终的结果是,我可以将WinSCP发送到localhost:8022,它将为我提供对server3的文件访问权。

我正在尝试使用ssh隧道,但是通过我阅读的所有教程和问题似乎都没有适用于这种情况。

我在Windows上使用putty。

任何建议都会有所帮助。谢谢。

6 个答案:

答案 0 :(得分:20)

在OpenSSH中,我在需要隧道时使用此设置。这样我就可以直接输入sftp server3,而无需担心首先手动启动server2server1隧道。

# ~/.ssh/config

# to connect to server2, tunnel through server1
Host server2
ProxyCommand ssh server1 nc %h %p

# to connect to server3, tunnel through server2
Host server3
ProxyCommand ssh server2 nc %h %p

为了更完整,我通常使用ssh -oCiphers=arcfour128,arcfour256,arcfour,blowfish-cbc -oControlMaster=no -oForwardX11=no -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes server1 nc %h %p作为ProxyCommand

  • 隧道连接的ssh连接已加密,因此对于外层使用较重的aes / 3des没有意义; arcfourblowfish速度更快。
  • -o****设置的其余部分没有偏执,因此即使Host server1添加了ssh_config有奇怪设置的节,也没有任何内容。

同样,您可以配置PuTTY以使用代理命令plink -P %proxyport -pw %pass %user@%proxyhost nc %host %port,并相应地在“连接/代理”配置窗格中设置代理主机名/端口/用户/密码。 plink和PuTTY套件的其余部分(pscppsftp等)加载以PuTTY图形配置保存的任何内容;希望WinSCP也能做到。 (我不使用它,所以我不太熟悉它的功能。)

答案 1 :(得分:10)

首先想到的解决方案是将一个本地端口连接到每个服务器。由于SSH使用端口22,我们将使用每个SSH连接将本地端口隧道连接到下一个服务器的端口22。

当您打开PuTTY时,您会遇到PuTTY Configuration对话框。您需要编辑的两个类别是“会话”和“连接→SSH→隧道”。

  1. 打开PuTTY的副本。使用以下设置:

    • 连接到主机

      • 主机名:server1
      • 港口:22
    • 隧道端口

      • 本地模式
      • 源端口:15500
      • 目的地:server2:22(安全shell端口)

        PuTTY Configuration window before pressing Add PuTTY Configuration window after pressing Add

    现在,每次连接到本地计算机上的端口15500时,您的连接都将通过隧道连接到服务器2上的端口22.

  2. 打开PuTTY的副本。使用以下设置:

    • 连接主机
      • 主机名:localhost
      • 港口:15500
    • 隧道一个端口
      • 本地模式
      • 源端口:15501
      • 目的地:server3:22(安全shell端口)
  3. 打开PuTTY的副本。使用以下设置:

    • 连接主机
      • 主机名:localhost
      • 港口:15501
    • 隧道一个端口
      • 本地模式
      • 源端口:15502
      • 目的地:server3:22(安全shell端口)
  4. 使用WinSCP连接到端口localhost上的15502。您的连接将通过隧道传输,就像您直接连接到server3一样。

  5. 请在评论中告诉我这是否适合您。祝你好运!

答案 2 :(得分:4)

此方法类似于在open ssh配置文件中使用proxycommand的方法。

此方法的先决条件是所有中间(代理)主机必须使用Pageant进行公钥身份验证,否则您将最终使用闪烁的游标而不是其他任何内容。要了解有关Pageant,PuTTYgen和公钥的更多信息,请参阅:
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter8.html#pubkey
http://the.earth.li/~sgtatham/putty/0.62/htmldoc/Chapter9.html#pageant

我们有四台机器可按此顺序进入 PuttyPC - > server01 - > server02 - > server03

对于server01,我们将Putty保存的会话作为:
主窗口:user1@server01 //端口22 // SSH
将此会话另存为server01

对于server02,我们将Putty保存的会话作为:
主窗口:user2@server02 //端口22 // SSH
代理配置窗口:键入local //代理命令plink -load server01 -nc %host:%port
将此会话另存为server02

对于server03,我们将Putty保存的会话作为:
主窗口:user3@pc3 //端口22 // SSH
代理配置面板:键入local //代理命令plink -load server02 -nc %host:%port
将此会话另存为server03

这意味着server03的已保存会话将为server02调用已保存的会话,而server02保存的会话将调用server01会话。

答案 3 :(得分:0)

有很好的描述perl脚本解决方案here。也请阅读发布的评论。

SSH Agent Forwarding上阅读更多内容(在评论后的perl脚本中提及)。

答案 4 :(得分:0)

答案是从server3反向隧道

答案 5 :(得分:0)

如果您只需要超越一台服务器,我发现直接在WinSCP上进行此设置更容易。

场景:计算机 - > server1-> server2

1:设置与server2的连接

2:点击高级 - >连接 - >隧道

3:启用SSH隧道并将主机设置为server1