将文件从一个远程服务器复制到另一个远程服务器时,如何在unix命令(SCP)中指示端口号?

时间:2015-05-19 09:23:42

标签: unix scp port-number

我有一个案例,当有2个远程主机,每个主机都有一个唯一的端口号,我需要在使用SCP命令时指示。没有问题表明第一个的唯一(非22)端口号,但我无法弄清楚如何为第二个指示它。

以下是现在的样子 -

scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory

2 个答案:

答案 0 :(得分:1)

你在问题​​中运行scp的方式,它只是调用第一个主机上的scp程序,告诉它将文件发送到第二个主机。您可以直接调用ssh在第一台主机上运行scp命令,但是您喜欢它:

ssh -p1234 user1@host1 'scp -P2345 /path/to/file user2@host2:/path/to/directory'

如果第一台主机无法直接连接到第二台主机,您通常会使用scp选项-3通过本地主机将数据从第一台主机发送到第二台主机。如果你处于那个位置,你可以模仿scp如何运行这种转移,尽管它有点像黑客:

yes "" | tr '\n' '\0' |
    ssh -p1234 user1@host1 'scp -f /path/to/file' |
    ssh -p2345 user2@host2 'scp -t /path/to/directory'

这基于how the SCP protocol works。第一个ssh行以“远程源”模式在第一个远程主机上运行scp以发送源文件。第二个ssh行以“远程接收器”模式在第二个主机上运行scp以接收文件并将其写入目录。 “远程源”和“远程接收器”是分别在接收或发送文件时通常在远程系统上运行的scp

yes "" | tr '\n' '\0' |行创建了一个NUL(Ascii 0)字节流,这是协议工作所需的。 scp -f实例会读取这些内容,并且不会在没有它们的情况下发送文件。如果您愿意,还有其他方法可以生成NUL字节流。

答案 1 :(得分:-1)

不知道如何使用参数执行此操作,但您可以尝试编辑〜/ .ssh / config

Host test
  HostName test.com
  Port 22000
  User me