如何通过中间服务器 SCP 文件?

如何通过中间服务器 SCP 文件?

我在 WinXP 上使用 Ccygwin(使用 bash shell)。我想将文件从本地主机 SCP 到远程计算机——host2。但是,我只能通过 SSH 连接到中间计算机——host1,然后从那里通过 SSH 连接到 host2。(注意,我无法从本地主机访问 host2)。

我以为隧道是我的答案,但当我尝试建立隧道时

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

但是输入此命令并按下回车键后,系统就挂起了。设置隧道然后 SCP 文件的正确方法是什么?

谢谢, -

答案1

自从OpenSSH 7.3,您可以使用-J-o ProxyJump来指定堡垒/跳转主机。因此,要node2通过SSH 连接到node1

ssh -J you@node1 you@node2

SCP 没有参数-J,但它允许-o,因此其有效:

scp -o ProxyJump=you@node1 file.txt you@node2:~

答案2

这已经是最好的答案了这里

总结一下:将以下内容放入~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh [email protected] nc %h %p 2> /dev/null

然后,scp每当您想要通过 proxy.machine 进行代理时,只需简单地将目标指向 target.machine 即可!

也适用于ssh,因此也可以节省您通过 ssh 连接到目标机器的时间。

应该感谢 2011 年回答此问题的用户 24925。

答案3

要设置 SSH 隧道,请使用以下格式:

ssh -L 9999:host2:22 user@host1

此命令连接到 ,host1user在计算机上通过隧道端口 9999 向 上的端口 22 发出命令host2。这是可选的,或者您可以使用或之-N类的命令来保持会话处于活动状态(如果需要)。topwatch

然后,只需scp转到 localhost:9999 上的 host2 即可。

答案4

现在您可以使用 -J 选项通过 ssh 隧道发送文件

scp -J proxy-host your-file destination-host:[directory]

如果您需要在代理主机上指定端口,则必须使用 -P 选项

scp -P port-number -J proxy-host your-file destination-host:[directory]

最后,如果您需要从子目录发送文件,可以使用 -r 选项

scp -r -P port-number -J proxy-host your-file destination-host:[directory]

指定选项的顺序很重要!

相关内容