通过 SSH 建立安全连接

通过 SSH 建立安全连接

我正在设置一个需要通过 SSH2 建立安全连接的服务器应用程序,例如客户端必须打开与服务器的 SSH2 连接才能到达特定的应用程序:

% ssh -s -p5000 my.server.com app

我想了解,此命令完成后究竟发生了什么?客户端/服务器如何知道它们必须通过 SSH 安全通道运行?这称为 ssh 隧道,还是有不同的名称?

谢谢。

答案1

% ssh -s -p5000 my.server.com app连接到 my.server.com,然后在 my.server.com 中运行“app”子系统

客户端/服务器如何知道他们必须通过 SSH 安全通道运行?

SSH 安全通道有点令人困惑:SSH 已经很安全了。安全通道可以是 VPN。

请注意,SSH 隧道和 VPN 不是一回事:

  • VPN 在传输层(连接网络)工作,而 SSH 隧道在应用程序层(连接主机)工作。
  • VPN 可以是硬件实现的,也可以是软件实现的,而 ssh 隧道始终是软件实现的。
  • 您可以在 VPN 内运行 ssh。

答案2

您正在连接到tcp my.server.com:5000,它在那里运行 ssh 子系统“app”。正在执行的操作由该子系统定义(在 ssh 服务器配置文件中)。该子系统可以通过 stdin 和 stdout 来回传输数据。外部对手会看到 tcp 连接,看到这是 ssh 会话,仅此而已。这不称为“ssh 隧道”。

隧道是指您像这样转发某个 TCP 套接字:ssh firewall -L 12345:system-behind:54321,然后在本地连接到localhost:12345,它就像您坐在防火墙上并system-behind:54321从那里连接到一样。您通过 ssh“隧道化”tcp 连接。通过添加 -g,您可以允许网络中的任何人连接到防火墙you:12345,就像连接到system-behind:54321防火墙一样。

例如,假设 Linux 防火墙执行 NAT 并带有 ssh 服务器,后面还有一些 Windows 服务器,该服务器有防火墙,只允许来自本地网络的连接。您可以像这样连接:ssh firewall -L 13389:windows-server-address:3389然后xfreerdp /v:localhost:13389;服务器将看到来自防火墙本地地址的连接,而不是来自您的互联网地址的连接。

您可以使用 反向执行此操作ssh remote -R 12345:system-near-you:54321。然后打开远程套接字,远程用户就可以连接到localhost:12345并最终像他们坐在您的机器上并连接到 一样连接system-near-you:54321。这是反向隧道。同样,-g 不仅允许直接位于远程的用户执行此操作,还允许任何可以连接到 的用户执行此操作remote:12345

还有 ssh ip 隧道,当您在服务器和客户端上创建虚拟隧道接口时,分配它们的 ip 地址并使用 ssh 连接它们。这称为 VPN,但使用 ssh 机制执行时不太方便,而且我从未见过有人使用这种技术。

相关内容