我处于需要将大量数据从服务器A传输到服务器C的情况。但是:
描述情况的简图:
有没有办法通过我的笔记本电脑从服务器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国旗,就像我的情况一样。 所以这里有一些评论的答案:
ssh host2 -L 3333:host3:22 。 这将像往常一样把你带到host2。 再次在另一个窗口的host1中键入ssh localhost -p 3333 -L 4444:host4:22 ; 这将把你带到host3。 ssh -p 4444 ...你明白了。 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
我用这个问题的答案之一解决了这个问题。 以下是我采取的步骤:
从笔记本电脑,ServerA上的远程端口转发到笔记本电脑上的本地端口
[user@laptop]$ ssh -R 5001:localhost:5002 serverA -N
从笔记本电脑,笔记本电脑上的本地端口转发到ServerC上的远程端口(通过跳转主机ServerB)
[user@laptop]$ ssh -J userb@serverB -i ~/.ssh/id_rsa.pub -L 5002:localhost:22 userb@serverC -N
从ServerA,通过端口5001的scp文件
[usera@serverA]$ scp -P 5001 ./* userb@localhost:/data/location/on/serverC
这有点冗长,但似乎工作。
数据永远不会驻留在笔记本电脑上,基本上是通过SSH隧道,如下所示:
ServerA:5001 -> laptop:5002 -> ServerC:22