您可以构建隧道,使本地端口在远程 PC 上可用。因此,我们定义了一个要在远程 PC 上打开的端口,该端口将重定向到您在构建隧道时拉过来的端口。
在 hop2 上:
ssh -R 5555:127.0.0.1:22 <hop1_user>@<hop1_IP>
#this has the effect of building a tunnel from hop2 to hop1, making hop2's port 22 available on hop1 as port 5555
现在在打开的隧道会话中,您可以从 hop1 到 file_origin 执行相同的操作。
在 hop1 上:
ssh -R 6666:127.0.0.1:5555 <origin_user>@<origin_IP>
#this has the effect of building a tunnel from hop1 to origin while also pulling the active tunnel with it, making hop1's port 5555 (hop2's port 22) available on origin as port 6666.
您可以将
-o
选项添加到scp
而不是.ssh/config
.$jump_host
在这种情况下是您的“服务器 B”。假设 OpenSSH,添加到 .ssh/config 中的 SSH 配置
这将导致SSH 能够通过代理通过名为near 的机器“直接”连接到名为distant 的机器。然后它可以使用 scp 和 sftp 等应用程序连接到远程机器。
为此,您需要在名为 near 的机器上安装 'nc' aka netcat。但是许多现代系统已经拥有它。
假设您已经记住了 tar 的语法和操作规则,towo 的 tar 解决方案对于一次性问题更有效。
在 (B) 机器附近的服务器上使用更新版本的 ssh,以下将在没有 netcat 的情况下工作:
但是,它需要 AllowTcpForwarding 在近 (B) 机器上为 yes(默认值)
编辑:需要 B 上的 OpenSSH 5.4+
您可以使用类似 ssh 的方式连接到服务器 B
然后你可以使用 ssh 到服务器 C
同样 scp 可以使用
请记住在 scp 和 ssh 中使用正确的 p 大小写
即使您需要使用证书进行身份验证(通常在 AWS 环境中),它也是可能的并且相对容易。
下面的命令会将文件从 a 直接复制
remotePath
到server2
您的计算机中localPath
。在内部,scp 请求通过server1
.另一种方法也可以(上传文件):
如果您改用密码身份验证,请尝试使用
如果您在两台服务器中使用相同的用户凭据:
该
-W
选项内置于 OpenSSH 的新(较早)版本中,因此仅适用于具有最低版本(5.4,除非您的发行版向后移植任何功能;例如,RHEL6 OpenSSH 5.3p1 包含此功能)的机器。根据发行说明:http ://www.openssh.com/txt/release-5.4%h
并且%p
是主机和端口的占位符。这不是 scp (这是 OP 要求的),但我发现
rsync
通过单跳从本地复制到远程非常简单:来源: http: //mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
我已经尝试了上面的 -o ProxyPass 建议并且不想更改配置以满足我不断变化的需求。正如上述链接中的作者所述,冒号 (:) 前面的目标文件对于指示指定路径在目标服务器上很重要。此外,使用 rsync,您可以选择日期比较、文件夹同步等。我希望这对某人有所帮助!
如果你想变得非常邪恶,你可以链接 ssh 和 tar,比如
tar c mydir | ssh server "ssh otherserver | tar x"
,但这可能会遇到各种问题。更简单的方法是使用 SSH 的内置方法建立一个 SSH 隧道;查看
-D
手册页中的交换机,然后将某个端口转发到另一台服务器的 ssh 端口。您也可以反向执行此操作,并且可能更容易。
假设您在要将文件发送到的机器上打开了一个 ssh 会话。这个跳得最远的 PC,我们称之为 hop2。您的“代理”主机将是 hop1。PC 是文件源,我们称之为源。
您可以构建隧道,使本地端口在远程 PC 上可用。因此,我们定义了一个要在远程 PC 上打开的端口,该端口将重定向到您在构建隧道时拉过来的端口。
在 hop2 上:
现在在打开的隧道会话中,您可以从 hop1 到 file_origin 执行相同的操作。
在 hop1 上:
您现在从 hop2 到 hop1 到 origin 的隧道。巧合的是,现在 5555 和 6666 端口都在源上打开,它们重定向到 hop2 的端口 22。在此会话中,以下两个都是到 hop2 的有效 scp 路由:
原产地:
通过这种方式,您可以在其间有任意数量的跃点,并且将两个以上的跃点链接在一起更容易使用。
尝试调整以下示例 openssh 配置以进行可用于多个主机的设置:
这假定一组服务器以“uat-”开头,只能通过 jumpbox/网关服务器“bastion-uat”访问。
ForwardAgent yes
如果您使用密钥登录,您可能还想添加。scp -o 'ProxyJump jumpboxname' somefilename.txt finaldestinationhost:/tmp/.