【问题标题】:how to transfer data between local and remote server connected via intermediate server?如何在通过中间服务器连接的本地和远程服务器之间传输数据?
【发布时间】:2014-08-01 15:55:45
【问题描述】:

我可以通过ssh -X servAlocal 登录,然后通过ssh -X servBservA 登录

要将数据从local复制到servB,我将scp文件从local复制到servA,然后从servA复制到servB

是否可以将文件从local直接复制到servB,反之亦然?

【问题讨论】:

  • 是的,阅读this

标签: linux bash shell ssh scp


【解决方案1】:

您可以使用 nc (net cat) 作为 ssh 的代理。

因此,对于您的示例,将您的 ~/.ssh/config 文件编辑为如下所示:

Host servB
ProxyCommand ssh -q servA nc servB 22

只要 nc 在您的路径中,您现在应该能够通过 ssh 或 scp 目录到 servB

如果您没有 nc,如果您的版本足够新 (>= OpenSSH 5.4),您可以使用 ssh -W 来完成,

Host ServB
  ProxyCommand ssh -W ServB:22 servA

【讨论】:

  • 嗨,@JohnC,我遇到了一个错误。 "nc: 无效选项 -- q"
  • 在我的服务器上看起来是被禁止的 :-( "ssh_exchange_identification: Connection closed by remote host"
  • 嗯,试试 username@servB。如果 nc 在那里,它应该可以工作。 (还要确保您使用端口 22 进行 ssh)
  • 还是同样的问题。也许这台服务器是不可能的。
  • @Lee 我更新了我的答案以涵盖没有 nc 的情况。如果您的 ssh 是最新的,它可能会解决您的问题。
【解决方案2】:

在 ssh 配置文件中使用 ProxyCommand

【讨论】:

    【解决方案3】:

    这是我平时做的(我是在Mac机上做的不知道和Windows机器有什么区别):

    一旦您与任何 servA 或 servB 建立连接,您就可以这样做:

    从本地复制到 servA 或 servB:

    $ scp -P <port-number used>  <file location to copy from> <username_in servA/servB>@localhost:<file location to copy to>
    

    注意:这可以在您的本地机器上运行,无需 ssh-ing 到任何 servA/servB,只需要建立连接。

    或从 servA 到 servB:

    $ scp -P <port-number used>  <username_in servA>@localhost:<file location to copy from> <port-number used> <username_in servB>@localhost:<file location to copy to>
    

    注意:我还没有尝试过从服务器到服务器的这个 scp,但看起来有点直截了当。

    只是想在这里提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      相关资源
      最近更新 更多