【问题标题】:scp between two terminal windows (or multihop scp)两个终端窗口之间的 scp(或多跳 scp)
【发布时间】:2015-09-11 19:13:24
【问题描述】:

我经常需要使用多个跃点通过 ssh 连接到多个系统。它也经常发生,然后我想将文件从目标系统复制到我的本地系统,或者以一种简单的方式(我当前的工作流程是将文件复制到两台机器都可以看到的外部位置,以便它为我节省了几跳,或者如果文件不是二进制文件,则将其复制/粘贴到另一个终端窗口)。 有没有简单的方法来做这样的事情?

我正在使用 OSX 和 iterm2(显然我不介意更改后者)。

所以连接类似于 (本地机器) -> (portal A) -> (machine B) -> (portal C) -> (machine D)

所以我想以一种简单的方式将文件从机器 A 复制到机器 D(不通过所有跃点复制文件或创建四个隧道)。

【问题讨论】:

  • 不幸的是,我认为你有你唯一的选择。不确定使用两台机器都可以访问的外部位置是否有更简单的方法。我一直遇到这个问题,最后做了多个隧道。

标签: macos ssh scp file-copying


【解决方案1】:

这并不完全符合您的要求,但是您可以使用一些技巧来使用 SSH 代理,从而极大地简化此类事情。首先要熟悉的是通过 netcat 代理多跳 SSH 连接。如果您在各种主机上安装了 OpenSSH 5.4 或更高版本,请在 ~/.ssh/config 中添加类似这样的内容:

Host B
    ProxyCommand ssh A -W %h:%p

Host C
    ProxyCommand ssh B -W %h:%p

Host D
    ProxyCommand ssh D -W %h:%p

如果任何中间体没有足够新的版本,但有 netcat (nc),您可以使用类似这样的东西:

Host D
    ProxyCommand ssh C nc %h %p

这将使ssh D 自动打开到 C 的隧道以运行连接,这将自动打开到 B 的隧道,...您必须验证 4 次(到 A,然后是 B,等等)(除非您设置了公钥身份验证),但除此之外它是透明的。这意味着您可以将它与sftp Dscp D:/path/to/file 等一起使用。

现在,您所描述的内容对此有一个重大限制。您当然可以从例如复制文件A 到 D 是这样的:

scp A:/path/to/file D:/path/to/file

...但是文件的内容将通过路径 A -> 您的计算机 -> A -> B -> C -> D。它们不会存储在该路径上的任何位置,但如果您之间的网络链接并且 A 很慢(例如,您在家工作),这将是一个瓶颈。在这种情况下,最好将 C 和 D 的 ~/.ssh/config 条目复制到计算机 A 上,正常 ssh 到 A 中,然后使用 scp /path/to/file D:/path/to/file 并剪掉多余的跃点。

顺便说一句,如果你想变得花哨,你可以把它添加到你的 ~/.ssh/config 中:

Host */* 
    ProxyCommand ssh $(dirname %h) -W $(basename %h):%p

然后使用ssh A/B/C/D等就地搭建隧道路径。详情请见the OpenSSH cookbook

【讨论】:

    【解决方案2】:

    我不得不考虑这个问题,但是如果您使用密钥设置了无密码身份验证,则可以这样做:

    $ cat test | ssh f21 "tee | ssh f20 \"tee test\""
    

    加密的 ssh 密钥无关紧要。对于通过一跳进行传输非常简单,对于更多跳它可能会变得混乱......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2021-03-10
      • 2019-06-19
      • 2015-09-10
      • 1970-01-01
      • 2020-01-15
      • 2011-03-25
      相关资源
      最近更新 更多