【问题标题】:SCP from remote server to another remote serverSCP 从远程服务器到另一个远程服务器
【发布时间】:2014-11-18 08:08:08
【问题描述】:

我有一个服务器“B”,它可以 SCP 文件到服务器“A”,也可以 SCP 文件到服务器“C”。

即 A B C

服务器“A”和服务器“C”无法相互访问。只有服务器 B 可以同时到达两者。 我想将文件从 A 传输到 C,而服务器 B 上没有(或最少)存储空间。

有没有一种方法可以在不将文件存储在 B 中或使用最少步骤的情况下将文件从 A 传输到 C?

谢谢。

【问题讨论】:

标签: linux ssh scp


【解决方案1】:

来自scp(1)

描述

... 在两个远程主机之间复制 也是允许的。

scp host1:foo.txt host2:foo.txt

【讨论】:

  • 试过了,但我认为我们的服务器有一些配置阻止它。
  • 您可能正在运行不支持它的旧版本。
  • 您可能应该添加选项-3 以使文件通过本地主机。从手册“-3 两个远程主机之间的副本通过本地主机传输。没有此选项,数据直接在两个远程主机之间复制。请注意,此选项禁用进度表。”
【解决方案2】:

如果你愿意,你可以不使用 scp 来做到这一点。登录机器“B”并运行:

ssh userA@A 'cat /source/file' | ssh userC@C 'cat > /dest/file'

您应该设置一个或两个 ssh 实例以使用密钥登录,这样两个 ssh 实例就不会同时提示您输入密码。

如果您希望文件复制过程更加防错,或者您想一次传输多个文件,您可以使用tar

ssh userA@A 'cd /source/dir && tar cf - file1 file2...' |
    ssh userC@C 'cd /dest/dir && tar xvf -'

如果您宁愿从 A 运行命令,那么这样的东西应该可以工作:

tar cf - file... | ssh userB@B 'ssh userC@C "cd /dest/dir && tar xvf -" '

【讨论】:

    【解决方案3】:

    你可以用隧道做到这一点:

    # Open a tunnel to server C
    $ ssh -L 2222:<server C>:22 -N -l user <server B> & 
    # Copy the file to server C
    $ scp <file> -P 2222 localhost:<remote filename> 
    

    请注意,在第 2 步之后隧道仍在运行。

    【讨论】:

      猜你喜欢
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2014-04-09
      • 2020-02-25
      • 2016-05-03
      • 2017-11-15
      • 2019-02-12
      相关资源
      最近更新 更多