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

将文件从一个远程服务器复制到另一个远程服务器时,如何在unix命令(SCP)中指示端口号?,unix,scp,port-number,Unix,Scp,Port Number,我有一个例子,当有两个远程主机时,每个主机都有一个唯一的端口号,在使用SCP命令时,我都需要指出这个端口号。为第一个端口指示唯一的非22端口号没有问题,但我不知道如何为第二个端口指示它 下面是它现在的样子- scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory 不知道如何处理参数,但您可以尝试编辑~/.ssh/config Host test HostName test.com

我有一个例子,当有两个远程主机时,每个主机都有一个唯一的端口号,在使用SCP命令时,我都需要指出这个端口号。为第一个端口指示唯一的非22端口号没有问题,但我不知道如何为第二个端口指示它

下面是它现在的样子-

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

不知道如何处理参数,但您可以尝试编辑~/.ssh/config

Host test
  HostName test.com
  Port 22000
  User me

按照问题中运行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'
这是基于。第一条ssh线路在第一台远程主机上以远程源模式运行scp以发送源文件。第二条ssh线路以远程接收器模式在第二台主机上运行scp,以接收文件并将其写入目录。远程源和远程接收器分别是scp在接收或发送文件时通常在远程系统上运行的


yes | tr'\n'\0'|行创建协议工作所需的NUL Ascii 0字节流。scp-f实例读取这些文件,没有它们就不会发送文件。如果您愿意,还有其他方法可以生成NUL字节流。

如果可能,我希望避免这种情况。只要一行,都在同一个命令中就好了。scp。。。站点1:文件-o端口=2345站点2。。。我没有办法为你的案子做测试。祝你好运。不接受-o参数,也不接受端口规范……我认为SSH密钥也有问题。看来,他们没有得到正确的阅读。我正在输入密码短语,它们不被接受,然后我得到了输入密码的线索,它也不被接受。这是您在回答中提供的第二个选项。当我分别使用SSH访问这两个帐户时,我在密码短语和读取SSH密钥文件方面没有问题。是的,在第二个示例中,几乎不可能为两个ssh实例输入密码或密码短语。到目前为止,只能弯曲命令行实用程序。