我们有一个服务器,其中一个工程师错误地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:42
, eth0
, user
, intermediate-host
和target-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
张贴了一个很好的答案,足以让我学习如何从这个问题的状况中恢复过来。 这个答案是我如何做的确切的一步一步。
root
身份使用arp -a
或ip neighbor list
查找错误configuration的服务器的MAC地址。 ssh user@link-local%dev
将SSH连接到服务器,其中:
您需要在目标的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。