SSH可以通过configuration不正确的子网访问服务器吗?

我们有一个服务器,其中一个工程师错误地configuration了子网,现在我们被locking在这台服务器之外,而且我所知道的唯一一个访问是IDC的串口控制台(这意味着要求IDC工程师帮助我们) 。

什么是错误的configuration:

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

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

您需要能够login同一网段上的其他主机。 一些访问错误configuration的主机的方法需要中间主机上的root权限,但是也有一种简单的方法可以在中间主机上访问而不需要root权限。

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

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

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

它是如何工作的详细说明

当无法直接打开TCP连接到目标主机时, ProxyCommand是一个sshfunction。 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可以find网段上的所有链路本地地址。

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

回落到IPv4

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

如果错误configuration的主机仍然可以使用其默认网关,则可以从外部访问它。 由于堆栈拒绝使用networking掩码覆盖的前缀之外的网关,可能错误configuration的networking掩码也会破坏默认网关。 如果确实如此,configuration错误的主机将只能与192.168.1.8通信,因为这是该configuration错误主机当前可访问的子网中唯一的其他IP地址。

如果你有192.168.1.8上的login,你可能只能从那里ssh到192.168.1.9。 如果192.168.1.8当前未分配,您可以暂时将其分配给您拥有根访问权的网段上的任何主机。

kasperd张贴了一个很好的答案,足以让我学习如何从这个问题的状况中恢复过来。 这个答案是我如何做的确切的一步一步。

  1. SSH在同一物理networking上的服务器
  2. root身份使用arp -aip neighbor list查找错误configuration的服务器的MAC地址。
  3. 使用MAC来链接本地转换器查找configuration错误的服务器的链接本地
  4. 现在可以通过ssh user@link-local%dev将SSH连接到服务器,其中:
    • 用户 – 我们被允许SSH的用户名
    • 链路本地 – 在步骤3中恢复的自分配IPv6地址
    • dev是物理接口,这个服务器可以从(例如eth0)

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

如果从10.0.0.220(例如10.0.0.220)向10.0.0.2(包含子网255.255.255.248)发送数据包,则10.0.0.2将查看其子网掩码以找出如何回复。 由于.220是255.255.255.248子网中的WAAY,.2必须将应答发送到默认网关。

所以如果你可以在同一个子网中加载一个IP地址,例如。 10.0.0.3,那么它将工作。

在你的具体情况下,对于10.0.0.9,子网255.255.255.254 只有一个额外的IP地址 ,即10.0.0.8。 所以如果你可以加载这个IP地址,你应该可以通过SSH。