17

这是场景

我正在尝试获取对 server3 的 scp 访问权限,但只有对服务器 1 的公共 ssh 访问。要 ssh 到 server3,我必须先 ssh 到 server1,ssh 到 server2,然后 ssh 到 server3。

我希望的最终结果是我可以 WinSCP 到 localhost:8022,它会给我对 server3 的文件访问权限。

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

我在 Windows 上使用腻子。

任何建议都会很有帮助。谢谢你。

4

6 回答 6

20

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

# ~/.ssh/config

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

# 连接server3,通过server2隧道
主机服务器3
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/是没有意义的;并且更快。3desarcfourblowfish
  • 其余的-o****设置是出于偏执,因此即使将Host server1具有非常奇怪设置的节添加到ssh_config.

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

于 2009-07-13T21:50:01.473 回答
10

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

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

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

    • 连接到主机

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

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

        按添加之前的 PuTTY 配置窗口 按添加后的 PuTTY 配置窗口

    现在,每次您连接到本地计算机上的端口 15500 时,您的连接都会通过隧道连接到 server2 上的端口 22。

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

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

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

在评论中让我知道这是否适合您。祝你好运!

于 2009-06-18T06:35:36.130 回答
6

此方法类似于您可以在打开的 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 会话。

于 2012-02-09T23:00:14.930 回答
0

答案是从 server3 反向隧道

于 2009-06-18T15:38:38.183 回答
0

这里有很好的描述 perl 脚本解决方案。也请阅读帖子上的评论。

阅读有关SSH 代理转发的更多信息(在 perl 脚本帖子评论中引用)。

于 2009-06-18T04:54:42.037 回答
0

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

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

1:设置与 server2 的连接

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

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

于 2017-01-19T14:04:36.393 回答