具有两个不同端口的 SCP

lin*_*der 16 scp

如何使用 scp 命令从本地 PC 在两个远程服务器之间复制文件?

远程服务器 1:IP=67.12.21.133 & port=6774

远程服务器 2:IP=67.129.242.40 &端口=6774

scp -rp -P 6774 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:

给出密码 67.12.21.133 后出现错误,

ssh:连接到主机 67.129.242.40 端口 22:连接被拒绝

失去了连接

dan*_*ann 22

您可以使用~/.ssh/config指定用于主机的端口(以及设置许多其他好的东西;查看手册页man ssh_config):

# ~/.ssh/config

Host 67.12.21.133
  Port 6774

Host 67.129.242.40
  Port 6774
Run Code Online (Sandbox Code Playgroud)

执行此操作时,您必须使用-3scp选项,它通过您的本地机器复制文件。否则,scp 在第一台主机上通过 ssh 发出 scp 命令,所以它实际上运行

 ssh -p 6774 denny@67.12.21.133 scp -rp /home/denny/testapp1.txt denny@67.129.242.40:
Run Code Online (Sandbox Code Playgroud)

然后使用第一个远程主机 (67.12.21.133) 的 ~/.ssh/config 而不是本地主机。

~/.ssh/config正确设置后,这应该可以工作:

scp -rp3 denny@67.12.21.133:/home/denny/testapp1.txt denny@67.129.242.40:
Run Code Online (Sandbox Code Playgroud)

当然,您也可以将 ~/.ssh/config 文件的内容复制到您的第一个远程主机上,然后您可以不带该-3选项使用 scp ,这可能会加快传输速度。

或者您可以使用 scp 使用的技巧并使用这样的命令行:

ssh -p 6774 denny@67.12.21.133 scp -rp -P 6774 /home/denny/testapp1.txt denny@67.129.242.40:
Run Code Online (Sandbox Code Playgroud)

(注意 ssh 和 scp 的端口参数的不同情况:ssh -p 6774vs. scp -P 6774

PS:我从 OpenSSH bugzilla 那里得到了这个信息,我把它作为一个错误输入:https ://bugzilla.mindrot.org/show_bug.cgi?id =2020


tpf*_*tpf 9

我没有找到简单的解决方案,但您可以尝试通过以下方式使用 sshfs:

mkdir /tmp/h1
mkdir /tmp/h2

sshfs -p 6774 user1@host1:/public /tmp/h1
sshfs -p 2211 user2@host2:/data/src /tmp/h2

cp /tmp/h1/files.* /tmp/h2

fusermount -u /tmp/h1
fusermount -u /tmp/h2
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是使用 ssh(实际上没有成功测试):

ssh user1@host1 "cat /public/file.bin" | ssh user2@host2 "cat >/data/file.bin"
Run Code Online (Sandbox Code Playgroud)

目前我没有找到输入两个密码的正确方法。它有时会询问两个密码,但不接受任何人。也许如果您在主机之间交换 ssh 密钥,它就可以工作。因为你不需要密码。

我希望这有帮助?托马斯


小智 8

根据Linux Academy 博客上的这个页面,您只需要-P 6774在第二个远程路径之前使用该选项:

scp -rp -P 6774 denny@67.12.21.133:/home/denny/testapp1.txt -P 6774 denny@67.129.242.40:
Run Code Online (Sandbox Code Playgroud)

-P标志的每次使用仅适用于命令行上的下一个位置,而不是整个命令。任何-P与前一个路径(或命令名称 [ scp])之间没有 的位置默认为标准端口 (22)。

  • 如果这有效的话。但我得到“-P:没有这样的文件或目录”。 (2认同)

Mit*_*tch -3

如果需要将数据从一台服务器传输到另一台服务器,请使用 SCP 命令。这样做

只需按键盘上的Ctrl+ Alt+T打开终端。打开后,运行以下命令。

scp -pr root@192.168.1.2:/path/to/files /destination/path
Run Code Online (Sandbox Code Playgroud)

注意:如果您想提及端口号,可以使用参数-P。

  • 你还没有读过这个问题。他的端口有问题。您可以设置第一个端口,但可以使用 -P 参数设置第二个端口 (2认同)
  • 但这样不行,你可以用 -P 设置第一个,但第二个仍然是 22。试试吧。我目前正在进行测试,但仍然没有有效的解决方案。 (2认同)