在使用笔记本电脑的服务器之间传输文件

我处于需要将大量数据从服务器A传输到服务器C的情况。但是:

  • 服务器A不具有对服务器C的networking访问权限
  • 我有权利SSH​​服务器A和服务器C.
  • 为了SSH到服务器C,我必须先跳过主机服务器B
  • 数据足够大,我无法从服务器A实际下载到笔记本电脑磁盘,然后将其上传到服务器C.
  • 这是一次“转移”
  • 服务器运行的是Linux,而笔记本电脑是Mac

描述情况的简图:

服务器连接

有没有办法通过我的笔记本电脑从服务器A“stream”文件到服务器C?

如果您的跳转服务器不会限制太多,可以在笔记本上的一个命令中完成:

ssh jumpserverB ssh serverC tar cf - dir1 dir2 | ssh serverA tar xvf - 

瞧!

编辑:呃 – 那是错误的方向。 所以让我们换个方式:

 ssh serverA tar cf - dir1 dir2 | ssh jumpserverB ssh serverC tar xvf - 

dir1和dir2是包含要传输的数据的两个目录。

我再次编辑这个答案 – 尽pipeFGreg alredy解决了他原来的问题 – 因为他使用-J的解决scheme将在一些机器上工作,而不是在其他机器上工作。 因为他们的ssh可能不知道-J国旗,就像我的情况一样。 所以这里有一些评论的答案:

  • 我使用了tar(磁带归档器),因为它可以处理无限数量的数据,而且如果使用标准输出作为“磁带”,则可以通过任何东西进行pipe道传输,而不必将其存储在任何地方。 这样,只要你可以从一台机器跳到另一台机器,你就可以通过无限次数的传输来传输数据。
  • 例如“主机密钥validation失败”可以通过ssh-ing到第一台机器,然后input“ssh nextmachine”等等。 当然,如果你必须改变用户inbetween或使用-i指定pubkeys,你也必须在你的pipe ssh命令中这样做。
  • 是的,当然,tar可以为你压缩数据; 在大多数情况下,这将加快这一进程。 为了简单,我省略了它。
  • FGreg在他自己的答案中的解决scheme有点不同,因为它不使用pipe道。 它使用ssh的port forwaring,并且是一个很好的方式来处理一个pipe道只是不做的工作情况。 再次,您可以添加尽可能多的端口转发,只要你想。 像在host1上一样: ssh host2 -L 3333:host3:22 。 这将像往常一样把你带到host2。 再次在另一个窗口的host1中键入ssh localhost -p 3333 -L 4444:host4:22 ; 这将把你带到host3。 ssh -p 4444 ...你明白了。
  • 有时候你需要反向转发,因为FGreg连接到serverA时不得不进行反向转发。 添加到我们上面的-L例子中,我们可以使用ssh serverA -R 4444:localhost:4444 serverA ; 在那里我们可以通过ssh -p 4444 localhost到达host4或者scp -P 4444 localhost
  • 当然,我们可以将其他东西完全地从其他端口进出隧道,但这将成为一般的博客文章,所以我会在这里停下来。

感谢Andrzej A. Filip指出https://unix.stackexchange.com/questions/85292/scp-from-one-remote-server-to-another-remote-server

我用这个问题的答案之一解决了这个问题。 以下是我采取的步骤:

  1. 将ServerA的公共SSH密钥添加到ServerC上的authorized_keys
  2. 从笔记本电脑,ServerA上的远程端口转发到笔记本电脑上的本地端口

     [user@laptop]$ ssh -R 5001:localhost:5002 serverA -N 
  3. 从笔记本电脑,笔记本电脑上的本地端口转发到ServerC上的远程端口(通过跳转主机ServerB)

     [user@laptop]$ ssh -J userb@serverB -i ~/.ssh/id_rsa.pub -L 5002:localhost:22 userb@serverC -N 
  4. 从ServerA,通过端口5001的scp文件

     [usera@serverA]$ scp -P 5001 ./* userb@localhost:/data/location/on/serverC 

这有点冗长,但似乎工作。

数据永远不会驻留在笔记本电脑上,基本上是通过SSH隧道,如下所示:

 ServerA:5001 -> laptop:5002 -> ServerC:22