两个终端窗口(或多跳scp)之间的scp

时间:2015-06-25 09:10:20

标签: macos ssh scp file-copying

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

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

所以连接类似于(本地机器) - > (门户网站A) - > (机器B) - > (门户C) - > (机器D)

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

2 个答案:

答案 0 :(得分:0)

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

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

加密的ssh密钥并不重要。对于通过一跳传输它是非常简单的,对于更多的跳跃它可能会变得混乱......

答案 1 :(得分:0)

这不是你所要求的,但是你可以使用SSH代理进行一些技巧,极大地简化了这类事情。熟悉的第一件事是通过netcat代理多跳SSH连接。如果您在各种主机上安装了OpenSSH 5.4或更高版本,请在〜/ .ssh / config中添加如下内容:

Get-Help Get-Service -Full

如果任何中间体没有足够新的版本,但确实有netcat(Host B ProxyCommand ssh A -W %h:%p Host C ProxyCommand ssh B -W %h:%p Host D ProxyCommand ssh D -W %h:%p ),你可以使用类似的东西:

nc

这将使Host D ProxyCommand ssh C nc %h %p 自动打开到C的隧道以运行连接,这将自动打开到B的隧道,......您将需要进行4次身份验证(到A,然后是B)等等)(除非你设置了公钥认证),但除此之外它是透明的。这意味着您可以将其与ssh Dsftp D等一起使用

现在,对于您所描述的内容,存在一个显着的限制。你当然可以复制文件,例如A到D是这样的:

scp D:/path/to/file

...但文件的内容将沿着路径A - >行进。你的电脑 - > A - > B - > C - > D.它们不会存储在该路径上的任何位置,但如果您和A之间的网络链接很慢(例如,您在家工作),这将成为瓶颈。在这种情况下,最好将C和D的〜/ .ssh / config条目复制到计算机A上,将ssh复制到A中,然后使用scp A:/path/to/file D:/path/to/file 并删除额外的跃点。

顺便说一句,如果你想得到想象,你可以将它添加到你的〜/ .ssh / config:

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

然后使用Host */* ProxyCommand ssh $(dirname %h) -W $(basename %h):%p 等在现场构建隧道路径。有关详细信息,请参阅the OpenSSH cookbook