Dav*_*ave 20 ssh scp ssh-tunnel
我在 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'
Run Code Online (Sandbox Code Playgroud)
但是在输入这个命令并按回车后,系统就挂了。设置隧道然后SCP文件的正确方法是什么?
谢谢, -
jme*_*etz 20
这已经在这里得到了最好的回答。
总结一下:将以下内容放入 ~/.ssh/config
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh proxyuser@proxy.machine nc %h %p 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
然后只要scp您想通过 proxy.machine 代理就可以随时访问 target.machine!
也适用于ssh,因此也可以节省您通过 ssh 连接到目标机器的时间。
应该归功于在 2011 年回答这个问题的 user24925。
小智 18
从OpenSSH 7.3 开始,您可以使用-J或-o ProxyJump来指定堡垒/跳转主机。因此,要以SSHnode2通过node1:
ssh -J you@node1 you@node2
Run Code Online (Sandbox Code Playgroud)
SCP 没有-J参数,但它确实允许-o,所以这是有效的:
scp -o ProxyJump=you@node1 file.txt you@node2:~
Run Code Online (Sandbox Code Playgroud)
Rai*_*ain 14
要设置 SSH 隧道,请使用以下格式:
ssh -L 9999:host2:22 user@host1
Run Code Online (Sandbox Code Playgroud)
此命令将连接到host1作为user和隧道端口9999的计算机发出的命令到端口22上host2。-N是可选的,或者如果需要,您可以使用类似top或watch保持会话活动。
然后,只需scp到 localhost:9999 上的 host2。
您可以首先将文件 scp 到 host1,如下所示:
scp file dalvarado@host1:.
Run Code Online (Sandbox Code Playgroud)
然后执行以下操作将其发送到 host2:
ssh -t dalvarado@host1 'scp file dalvarado@host2:.'
Run Code Online (Sandbox Code Playgroud)
-t强制ssh它分配伪终端的选项,这可能会使 host1 更容易提示scp您输入密码。如果您在任何地方都运行并配置了 ssh-agent,则不应提示您输入密码。
我提供这种替代方案,因为如果您使用隧道,您仍然需要两个命令:一个用于设置隧道,另一个用于通过隧道复制文件。这看起来更简单。