원격 랩 시스템에는 5 분마다 cron 작업으로 실행되는 기본 점프 박스에 대한 역방향 SSH 터널을 시작하는 쉘 스크립트가 있습니다. SSH 터널이 작동하면 아무 일도 일어나지 않으며, 터널이 다운되면 시작합니다.
#!/bin/bash
createTunnel() {
/usr/bin/ssh -N -R :2222:localhost:22 username@jumpbox.example.com
if [[ $? -eq 0 ]]; then
echo Tunnel to jumpbox created successfully
else
echo An error occurred creating a tunnel to jumpbox. RC was $?
fi
}
/bin/pidof ssh
if [[ $? -ne 0 ]]; then
echo Creating new tunnel connection
createTunnel
fi
이것은 원격 시스템이 재부팅되거나 점프 상자 IP가 변경 될 때 원격 시스템에 액세스 할 수 있도록 매우 안정적입니다. 그러나 최근에이 시스템에 두 번째 SSH 터널을 추가했으며 두 터널 중 하나가 다운되어 다시 설정되지 않은 상황이있었습니다. 하나의 터널이 있었기 때문에 pidof 출력은 여전히 PID와 함께 반환되므로 스크립트에서 "createTunnel"을 실행하지 않은 것으로 보입니다. SSH 터널이 두 개이므로 pidof 출력에는 두 PID가 모두 표시됩니다.
$ /bin/pidof ssh
28281 28247
터널 중 하나만 다운되었는지 확인하기 위해 스크립트를 어떻게 조정할 수 있습니까?
autossh -f ...
. 두 개의 연결이 동일한 끝점에 있는지 확실하지 않습니다username@jumpbox.example.com
. 그래서, 하나의 경우ssh
(또는autossh
) 모두 터널을 만들 수 있습니다, 단지 추가 사용-R
또는-L
.