使用非标准端口在两个远程主机上进行 SCP

使用非标准端口在两个远程主机上进行 SCP

有没有办法scp -3将文件从一台远程主机复制到另一台远程主机,两台主机都使用非标准 SSH 端口,而无需配置所涉及的每台主机~/.ssh/config

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

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 隧道。

答案1

Archemar 的解决方案将复制数据,但不会复制其余数据(用户、组、权限、ACL、符号链接)。因此,我建议使用 tar(如果需要,它可以一次复制整个树):

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

如果有必要,您可以-z向 tar 添加开关以使其压缩数据。您可以通过添加 来选择任何目标目录-C DIRECTORY。这不会处理源主机和目标主机上的不同文件名,因此您可能需要添加 `

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

另一种简单的方法是将要复制的数据“暂时停放”在本地主机上,但很可能您已经考虑过这一点并将其丢弃。

答案2

你不能。

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

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

或者,如果您不想编辑 ~/.ssh/config,请使用 -F 选项指定备用配置文件

另一个技巧是使用 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

答案3

我会尝试

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

这意味着你可以使用 ssh。另请注意:

  • 文件内容将进入本地主机并从本地主机传出,
  • 如果文件很小,你最好复制到临时本地位置,
  • 如果文件很大,出现问题,您就必须重新启动。

编辑:tty 问题

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

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

相关内容