В удаленной лабораторной системе у меня есть сценарий оболочки, который запускает обратный туннель SSH к моей главной перемычке, который запускается с заданием cron каждые 5 минут. Если 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-адрес Jumpbox изменится. Однако недавно я добавил второй SSH-туннель к этой системе, и возникла ситуация, когда один из двух туннелей вышел из строя и не был восстановлен. Похоже, что поскольку был один туннель, вывод pidof по-прежнему возвращался с PID, поэтому скрипт никогда не запускал "createTunnel". Поскольку у меня есть два SSH-туннеля, вывод pidof показывает оба PID:
$ /bin/pidof ssh
28281 28247
Как я могу настроить свой сценарий, чтобы определить, не работает ли только один из туннелей?