是否可以通过 SSH 访问子网配置错误的服务器?

是否可以通过 SSH 访问子网配置错误的服务器?

我们有一台服务器,我们的一位工程师错误配置了子网,现在我们被锁定在该服务器之外,并且我所知道的唯一可行的访问是来自 IDC 的串行控制台(这意味着请 IDC 工程师来帮助我们解决这个问题)。

配置错误的内容:

address 192.168.1.9 # Original address there was
netmask 255.255.255.254 # Misconfigured, originally should've been .240

出于好奇 - 有没有办法避免调用 IDC 并以某种方式通过 SSH 连接到该主机(然后我们可以修复配置)?

答案1

您需要能够登录同一网段上的另一台主机。某些访问配置错误的主机的方法需要中间主机上的 root 权限,但还有一种简单的方法无需中间主机上的 root 权限即可访问。

使用 IPv6 访问主机的简便方法

ssh -o ProxyCommand='ssh -W [fe80::42:ff:fe:42%%eth0]:%p user@intermediate-host' root@target-server

上述命令中的以下示例值需要替换为您的用例的正确值:fe80::42:ff:fe:42eth0userintermediate-hosttarget-server

详细解释其工作原理

ProxyCommand是无法直接打开与目标主机的 TCP 连接时使用的 ssh 功能。 的参数ProxyCommand是使用其 stdin/stdout 而不是 TCP 连接的命令。

-W用于打开单个端口转发并将其连接到 stdin/stdout。这与 完美契合ProxyCommand

fe80::42:ff:fe:42%%eth0是目标主机的链路本地地址。请注意,由于ProxyCommand使用%转义符,输入的 ssh 命令必须%%在该位置使用。您可以通过运行 来查找网段上的所有链路本地地址ssh user@intermediate-host ping6 -nc2 ff02::1%eth0

为此目的使用 IPv6 链路本地地址通常是最简单的方法,因为它在所有现代系统上默认启用,并且即使 IPv4 和 IPv6 堆栈都严重配置错误,链路本地地址仍能继续工作。

恢复到 IPv4

如果在配置错误的主机上完全禁用 IPv6(绝对不推荐),那么您可能不得不使用 IPv4。由于 IPv4 没有像 IPv6 那样的本地链路地址,因此使用 IPv4 访问配置错误的主机会变得更加复杂,并且需要中间主机上的 root 访问权限。

如果配置错误的主机仍能使用其默认网关,您将能够从外部访问它。配置错误的网络掩码可能也破坏了默认网关,因为堆栈拒绝使用网络掩码所涵盖的前缀之外的网关。如果确实如此,配置错误的主机将只能与 192.168.1.8 通信,因为这是此配置错误的主机当前可访问的子网中唯一的其他 IP 地址。

如果您在 192.168.1.8 上有登录名,您可能只需从那里 ssh 到 192.168.1.9。如果 192.168.1.8 当前未分配,您可以暂时将其分配给您有 root 访问权限的网段上的任何主机。

答案2

kasperd发布了一个很好的答案,足够详细,让我了解如何从问题中恢复过来。这个答案是我如何做到的确切步骤。

  1. 通过 SSH 连接到同一物理网络上的服务器
  2. 使用arp -aip neighbor list查找root配置错误的服务器的 MAC 地址。
  3. 使用MAC 到链路本地转换器查找错误配置的服务器的本地链接
  4. 现在可以通过ssh user@link-local%dev以下方式以任何用户身份通过​​ SSH 连接到服务器:
    • 用户 - 允许 SSH 使用的用户名
    • link-local-在步骤 3 中恢复的自分配 IPv6 地址
    • dev 是可从其访问此服务器的物理接口(例如 eth0)

答案3

您需要加载 IP 地址之内目标的配置子网,而不仅仅是您实际想要的范围内。

例如,如果您从 10.0.0.220 向子网为 255.255.255.248 的 10.0.0.2 发送数据包,则 10.0.0.2 将查看其子网掩码以确定如何回复。由于 .220 距离子网 255.255.255.248 很远,因此 .2 必须将回复发送到默认网关。

因此,如果您可以加载与 .2 位于同一子网内的 IP 地址(例如 10.0.0.3),那么它就可以工作。

在您的具体情况下,对于 10.0.0.9,子网 255.255.255.254仅有 1 个附加 IP 地址即 10.0.0.8。因此,如果您可以加载该 IP 地址,那么您应该能够使用 SSH。

相关内容