我们有一台服务器,我们的一位工程师错误配置了子网,现在我们被锁定在该服务器之外,并且我所知道的唯一可行的访问是来自 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:42
、eth0
、user
、intermediate-host
和target-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
发布了一个很好的答案,足够详细,让我了解如何从问题中恢复过来。这个答案是我如何做到的确切步骤。
- 通过 SSH 连接到同一物理网络上的服务器
- 使用
arp -a
或ip neighbor list
查找root
配置错误的服务器的 MAC 地址。 - 使用MAC 到链路本地转换器查找错误配置的服务器的本地链接
- 现在可以通过
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。