为了简单起见(我发现记住名字比记住任意字母更容易),我将省去字母并使用名称来指代这种场景中的机器。
假设我有两台机器,applejack
和pinkie-pie
,每台机器都在各自的 LAN 上,并且不在同一物理位置。我还有一台服务器,,cadance
它有直接面向互联网的连接。我想将文件从复制applejack
到pinkie-pie
,因此为了避免处理端口转发等,我设置了一个从pinkie-pie
到cadance
(ssh -R
等cadance
)的 ssh 隧道。现在我可以从任何地方连接到pinkie-pie
,只需连接到cadance
并指定要使用的备用端口即可。我还可以轻松地使用将文件复制pinkie-pie
到scp -P $that_port $some_file cadance:$some_path
。
我对其工作原理的理解是这样的:
- 建立安全
applejack
连接cadance
- 我已通过身份验证
cadance
applejack
从到建立一个安全连接,该连接pinkie-pie
跨越现有的反向隧道和步骤 1 中的新连接。- 我已通过身份验证
pinkie-pie
- 文件通过此连接直接从复制
applejack
到。pinkie-pie
我这样说对吗?这种方法安全吗?
如果我错了……这样复制的文件在cadance
传递给 之前是否被解密pinkie-pie
?未加密数据的痕迹有可能留在 上吗cadance
?
答案1
实际上,您的理解并不完全正确。如果我理解正确的话,您正在从 执行最后一个命令 ( scp -P $that_port $some_file cadance:$some_path
) applejack
。在这种情况下,您不是在向 进行身份验证cadance
(步骤 2),而只是连接到 的反向隧道pinkie-pie
。
安全连接直接从applejack
到;和pinkie-pie
之间没有安全连接(步骤 1)。原则上能够读取通过反向隧道传输的明文,但该明文本身是另一个加密通道,因此必须打破它。applejack
cadance
cadance
applejack
因此,您在和之间拥有一个端到端加密通道pinkie-pie
,就像您直接连接它们一样。反向隧道只是一种路由流量的复杂方式。
答案2
任何类型的隧道中都会临时保存数据,因此数据可能会被拦截,但如果中间服务器拾取加密数据并将其发送出去,那么它就无法对数据做任何事情。所以,中间人确实会获得数据,否则他就不是中间人了。