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,则不应提示您输入密码。
我提供这种替代方案,因为如果您使用隧道,您仍然需要两个命令:一个用于设置隧道,另一个用于通过隧道复制文件。这看起来更简单。
归档时间: |
|
查看次数: |
48458 次 |
最近记录: |