다른 서버와의 연결을 확인하는 방법

다른 서버와의 연결을 확인하는 방법

두 서버 간의 연결을 확인하고 싶습니다(즉, ssh가 성공했는지 여부).

주요 아이디어는 중간 서버 목록을 사용하여 서버 a와 서버 b 사이의 최단 경로를 확인하는 것입니다(예를 들어 개발 서버에 있고 프로덕션 서버에 연결하려는 경우 일반적으로 직접 SSH는 실패합니다).

시간이 오래 걸릴 수 있으므로 SSH를 사용하고 싶지 않습니다. 대신 먼저 연결할 수 있는지 확인하고, 그렇다면 SSH를 통해 연결을 시도하는 것을 선호합니다.

이 아이디어를 얻는 몇 가지 가능한 방법은 다음과 같습니다.

server-a -> server-b
server-a -> middle-server-1 -> server-b
server-a -> middle-server-6 -> server-b
server-a -> middle-server-3 -> middle-server-2 -> server-b

내가 무엇을 찾고 있는지 이해하길 바라나요?

답변1

서버 연결을 확인하려면 4가지 도구를 사용할 수 있습니다.

  1. 평평한

    예를 들어, 이는 서버에 연결을 시도하고 있는지 확인하지만 middle-server-1이 server-b에 연결할 수 있는지는 확인할 수 없습니다.

    카운트 스위치( )를 사용하여 -cping이 다른 서버에 ping을 시도하는 시간을 제어 할 수 있습니다. 1로 제한하면 충분합니다.

    $ ping -c 1 skinner
    PING skinner (192.168.1.3) 56(84) bytes of data.
    64 bytes from skinner (192.168.1.3): icmp_req=1 ttl=64 time=5.94 ms
    
    --- skinner ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.946/5.946/5.946/0.000 ms
    

    이 변수를 사용하여 이 명령의 상태를 확인할 수 있습니다 $?. 값이 0이면 성공을 의미하고, 그렇지 않으면 문제가 발생합니다.

    $ echo $?
    0
    
  2. 추적 경로

    연결을 확인하는 데 사용할 수 있는 또 다른 명령은 입니다 traceroute.

    $ traceroute skinner
    traceroute to skinner (192.168.1.3), 30 hops max, 60 byte packets
    1  skinner (192.168.1.3)  0.867 ms  0.859 ms  0.929 ms
    

    다시 말하지만, 이 도구는 한 서버를 통해 다른 서버로의 연결을 표시하지 않지만(핑과 동일한 문제) 네트워크를 통해 다른 서버로 연결되는 경로를 표시합니다.

  3. SSH

    ssh연결을 테스트하는 데 사용할 수 있습니다 BatchMode. BatchMode=yes사용자 이름/비밀번호 및 공개/개인 키만 사용하지 않고 다른 서버에 연결을 시도합니다 . 이는 일반적으로 작업 속도를 크게 향상시킵니다.

    $ ssh -o "BatchMode=yes" skinner
    

    대략적인 라이너를 만들어 서버 연결을 확인할 수 있습니다.

    $ ssh -q -o "BatchMode=yes" skinner "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK
    
    SSH_OK
    

    성공하면 메시지를 받게 되고 SSH_OK, 실패하면 메시지를 받게 됩니다 SSH_NOK.

    이 방법의 대안은 이 ConnectTimeout옵션도 포함하는 것입니다. 이렇게 하면 ssh고객이 오랜 시간을 소요하는 것을 방지할 수 있습니다 . 이와 같은 것은 일반적으로 허용됩니다 ConnectTimeout=5. 예를 들어:

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 skinner echo ok 2>&1
    ok
    

    실패하면 다음과 같이 표시됩니다.

    $ ssh -o BatchMode=yes -o ConnectTimeout=5 mungr echo ok 2>&1
    ssh: connect to host 192.168.1.2 port 22: No route to host
    

    또한 반환 상태도 설정됩니다.

    $ echo $?
    255
    
  4. 원격 로그인

    ssh이 테스트를 사용하면 기본 방법을 사용하여 다른 서버의 서버에 액세스할 수 있는지 확인할 수 있습니다 telnet.

    $ echo quit | telnet skinner 22 2>/dev/null | grep Connected
    Connected to skinner.
    

답변2

nc포트를 "ping"할 수도 있습니다.

nc -z hostname 22

이렇게 하면 컴퓨터가 일반 핑(ICMP)에 응답하지 않도록 구성되어 있어도 컴퓨터의 포트 22를 핑할 수 있습니다.

답변3

또는 다음과 같은 일부 구성 옵션을 설정하여 역방향 DNS로 제대로 구성되지 않은 시스템을 도울 수 있습니다 ConnectTimeout=1.UseDNS=no

관련 정보