SSH隧道链

这是情况

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

我希望最终的结果是我可以WinSCP到本地主机:8022,它会给我文件访问到server3。

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

我在Windows上使用腻子。

任何build议将是真正有用的。 谢谢。

在OpenSSH中,当我需要隧道时,我使用这个设置。 这使我可以直接键入sftp server3而不必担心手动启动server2server1隧道。

 #〜/ .ssh / config

 #连接到server2,通过server1隧道
主机server2
 ProxyCommand ssh server1 nc%h%p

 #连接到server3,通过server2隧道
主机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 ,并相应地在Connection / Proxy配置窗格中设置代理主机名/端口/用户/密码。 plink和PuTTY套件的其余部分( pscppsftp等)加载保存在PuTTY图形配置中的任何东西; 希望WinSCP也可以。 (我不使用它,所以我不太熟悉它的功能。)

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

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

  1. 打开PuTTY的副本。 使用这些设置:

    • 连接到主机

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

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

        按Add(添加)之前的PuTTY配置窗口按Add后的PuTTY Configuration窗口

    现在,每当您连接到本地计算机上的端口15500时,您的连接将被隧道传输到server2上的端口22。

  2. 打开PuTTY的副本。 使用这些设置:

    • 连接到主机
      • 主机名: localhost
      • 端口:15500
    • 隧道端口
      • 本地模式
      • 源端口: 15501
      • 目的地: server3:22 (安全外壳端口)
  3. 打开PuTTY的副本。 使用这些设置:

    • 连接到主机
      • 主机名: localhost
      • 港口:15501
    • 隧道端口
      • 本地模式
      • 源端口: 15502
      • 目的地: server3:22 (安全外壳端口)
  4. 使用WinSCP连接到端口15502上的localhost 。 您的连接将被隧道化,就像直接连接到server3

让我知道这是否适合你。 祝你好运!

这个方法与在open ssh配置文件中使用proxycommand的方式类似。

这个方法的一个先决条件是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,我们有一个保存会话的腻子:
主窗口: user1@server01 //端口22 // SSH
将此会话保存为server01

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

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

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

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

阅读更多关于SSH代理转发 (在Perl脚本发表评论中引用)。

答案是从服务器3反向隧道

如果你只需要超越一台服务器,我发现它更容易做到这一点我直接WinSCP的设置。

场景:computer-> server1-> server2

1:设置连接到server2

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

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