我有一个案例,当有2个远程主机,每个主机都有一个唯一的端口号,我需要在使用SCP命令时指示。没有问题表明第一个的唯一(非22)端口号,但我无法弄清楚如何为第二个指示它。
以下是现在的样子 -
scp -P 1234 username@site.com:/path/to/file username2@site2.com:/path/to/directory
答案 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