我经常需要使用多跳通过ssh连接到多个系统。我经常想要将文件从目标系统复制到我的本地系统,或者以一种简单的方式复制文件(我当前的工作流程是将文件复制到两个机器都可以看到的外部位置,以便它为我节省了一些啤酒花,或者如果文件不是二进制cat,则将其复制/粘贴到另一个终端窗口)。 有没有一种简单的方法可以做这样的事情?
我正在使用OSX和iterm2(显然我不介意改变后者)。
所以连接类似于(本地机器) - > (门户网站A) - > (机器B) - > (门户C) - > (机器D)
所以我想以简单的方式将文件从机器A复制到机器D(不通过所有跳跃复制文件或创建四个隧道)。
答案 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 D
,sftp 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
并删除额外的跃点。
scp /path/to/file D:/path/to/file
然后使用Host */*
ProxyCommand ssh $(dirname %h) -W $(basename %h):%p
等在现场构建隧道路径。有关详细信息,请参阅the OpenSSH cookbook。