두 서버 간의 연결을 확인하고 싶습니다(즉, 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가지 도구를 사용할 수 있습니다.
평평한
예를 들어, 이는 서버에 연결을 시도하고 있는지 확인하지만 middle-server-1이 server-b에 연결할 수 있는지는 확인할 수 없습니다.
카운트 스위치( )를 사용하여
-c
ping이 다른 서버에 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
추적 경로
연결을 확인하는 데 사용할 수 있는 또 다른 명령은 입니다
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
다시 말하지만, 이 도구는 한 서버를 통해 다른 서버로의 연결을 표시하지 않지만(핑과 동일한 문제) 네트워크를 통해 다른 서버로 연결되는 경로를 표시합니다.
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
원격 로그인
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