SCP在两个非标准端口的远程主机上

有没有一种方法可以使用scp -3将文件从一台远程主机复制到另一台,这两台主机都使用非标准的SSH端口,而不需要configuration~/.ssh/config涉及的每台主机。

我已经看到了在每个文件参数之前可以使用-P xxxxbuild议,如下所示:

 scp -3 -P 9000 localhost:source_file -P 9001 localhost:remote_file 

但是我得到:

 -P: No such file or directory 9001: No such file or directory 

在Ubuntu 17.04上。

请注意,以上并不像看起来那么疯狂。 涉及到的两个本地主机端口实际上都是自己到另一个主机的SSH隧道。

Archemar的解决scheme将获得复制的数据,而不是所有其余的(用户,组,权限,ACL,符号链接)。 所以我build议使用焦油(如果你愿意,可以一次完成整棵树):

 ssh -p 9000 localhost tar cf - source_file | ssh -p 9001 localhost tar xvf - 

您可以添加-z切换到焦油,使其压缩数据,如果重要的话。 您可以通过添加-C DIRECTORY来select任何目的地目录。 这不涉及源主机和目标主机上的不同文件名,所以您可能需要添加`

 ssh localhost -p 9001 "cd DIRECTORY; mv old new" 

另一个简单的方法是将临时驻留在本地主机上的数据拷贝到数据库中,但是很可能你已经考虑了这个并丢弃了它。

你不能。

你所能做的就是运行scp作为远程命令:

 ssh -p 9000 localhost "scp source_file -P 9001 localhost:remote_file" 

或者,如果不想编辑〜/ .ssh / config,则使用-F选项来指定备用configuration文件

另一个诀窍是使用sshfs:

 sshfs -p 9000 localhost:/somedir /tmp/src && sshfs -p 9001 localhost:/somedir /tmp/dst && scp /tmp/src/file /tmp/dst/file && fusermount -u /tmp/src && fusermount -u /tmp/dst 

我会尝试

 ssh -p 9000 localhost cat source_file | ssh -p 9001 localhost "cat > remote_file" 

这意味着你可以ssh。 还要注意的是:

  • 文件内容会来到本地主机,并从本地主机,
  • 如果文件很小,最好复制到临时的本地位置,
  • 如果文件很大,出错了,你必须重新开始。

编辑:tty的问题

为了避免tty /编码问题,可以命名pipe道

 mknod tmppipe p scp -P 9000 localhost:startfile tmppipe & scp -P 9001 tmppipe localhost:destfile