서브넷이 잘못 구성된 서버에 SSH 액세스 할 수 있습니까?


18

엔지니어 중 한 명이 서브넷을 잘못 구성한 서버가 있으며 이제이 서버에서 잠겼습니다. 내가 아는 유일한 액세스는 IDC의 직렬 콘솔입니다 (IDC 엔지니어에게 도움을 요청하는 것을 의미합니다) .

잘못 구성된 것 :

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

호기심에서-IDC 호출을 피하고 어떻게 든 SSH를 통해이 호스트에 연결하는 방법이 있습니까 (그런 다음 구성을 수정할 수 있습니까)?

답변:


25

동일한 네트워크 세그먼트의 다른 호스트에 로그인 할 수 있어야합니다. 잘못 구성된 호스트에 액세스하는 방법 중 일부는 중간 호스트에 루트가 필요하지만 중간 호스트에 루트가 없어도 액세스 할 수있는 쉬운 방법이 있습니다.

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는 TCP 연결 대신 stdin / stdout을 사용하는 명령입니다.

-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를 사용하여 잘못 구성된 호스트에 액세스하는 방식이 더 복잡해져 중간 호스트에 대한 루트 액세스가 필요합니다.

잘못 구성된 호스트가 여전히 기본 게이트웨이를 사용할 수있는 경우 외부에서 호스트에 액세스 할 수 있습니다. 아마도 잘못 구성된 넷 마스크는 스택이 넷 마스크가 포함하는 접두어 외부의 게이트웨이 사용을 거부하여 기본 게이트웨이를 손상 시켰을 수도 있습니다. 실제로이 경우 잘못 구성된 호스트는 192.168.1.8 과만 통신 할 수 있습니다. 이는 현재이 잘못 구성된 호스트에 액세스 할 수있는 서브넷의 다른 IP 주소이기 때문입니다.

192.168.1.8에 로그인 한 경우 거기에서 192.168.1.9로 ssh 할 수 있습니다. 192.168.1.8이 현재 할당되어 있지 않은 경우 루트 액세스 권한이있는 세그먼트의 모든 호스트에 일시적으로 할당 할 수 있습니다.


그리고 fe80::42:ff:fe:42주소는 ...? 잘못 구성된 서버 같아요?
Alexey Kamenskiy

@AlexKey 예, 잘못 구성된 서버의 링크 로컬 IPv6 주소로 대체해야합니다.
kasperd

1
IPv4를 통한 액세스의 예 (IPv6가 비활성화 된 경우)?
Alexey Kamenskiy

@AlexKey IPv6이 비활성화 된 경우 구성된 접두사 아래에 다른 IP 인 것처럼 보이기 때문에 192.168.1.8을 거쳐야한다고 생각합니다.
kasperd

1
이 질문과 같은 이유로 @Lenniey는 분명히 (적어도).
Alexey Kamenskiy

9

kasperd질문의 상황에서 어떻게 회복 할 수 있는지에 대해 충분히 자세하게 설명했습니다. 이 답변은 내가 한 방법의 정확한 단계별입니다.

  1. 동일한 물리적 네트워크의 서버에 대한 SSH
  2. 사용 arp -a또는 ip neighbor list같은 root잘못 서버의 MAC 주소를 찾을 수 있습니다.
  3. MAC을 사용하여 로컬 링크 변환기 를 잘못 구성한 서버의 로컬 링크 찾기
  4. 이제 다음을 통해 모든 사용자로 서버에 SSH 연결할 수 있습니다 ssh user@link-local%dev.
    • user-SSH가 허용되는 사용자 이름
    • 링크 로컬-3 단계에서 복구 한 자체 할당 된 IPv6 주소
    • dev는이 서버에 접근 할 수있는 물리적 인터페이스입니다 (예 : eth0)

2

실제로 원하는 범위 내뿐만 아니라 대상의 구성된 서브넷 내에 IP 주소를로드해야합니다 .

예를 들어 10.0.0.220에서 서브넷 255.255.255.248을 사용하여 10.0.0.2로 패킷을 보내면 10.0.0.2는 서브넷 마스크를보고 응답 방법을 찾습니다. 서브넷 255.255.255.248에서 .220이 WAAY이므로 .2는 대신 기본 게이트웨이로 응답을 보내야합니다.

따라서 .2와 같은 서브넷 내에 IP 주소를로드 할 수 있다면 (예 : 10.0.0.3이면 작동합니다.

특정 경우 10.0.0.9의 경우 서브넷 255.255.255.254 에는 1 개의 추가 IP 주소 , 즉 10.0.0.8 만 있습니다. 따라서 해당 IP 주소를로드 할 수 있으면 SSH 할 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.