我在 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
此命令连接到 ,host1
并user
在计算机上通过隧道端口 9999 向 上的端口 22 发出命令host2
。这是可选的,或者您可以使用或之-N
类的命令来保持会话处于活动状态(如果需要)。top
watch
然后,只需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]
指定选项的顺序很重要!