Если sshd
запущен, он будет принимать соединения через определенный порт.В противном случае попытка подключения завершится неудачей.
Если вы выполните следующую команду:
ssh -o PasswordAuthentication=No root@localhost true
Это не удастся в любом случае, но выходные данные будут другими.В случае, если сервер работает и принимает соединения, явное отключение аутентификации по паролю приведет к сбою с этим сообщением:
Permission denied (publickey,password).
В противном случае он напечатает сообщение, подобное этому:
ssh: connect to host localhost port 22: Connection refused
Поэтому я предлагаю отсканировать сообщение об ошибке, чтобы найти подсказку, подобную этой:
if ssh -o PasswordAuthentication=No root@localhost true \
|& grep -q "Connection refused"
then
echo "No server reachable!"
else
echo "Server reachable."
fi
Итак, вы можете написать свой скрипт так:
while ssh -o PasswordAuthentication=No root@localhost true \
|& grep -q "Connection refused"
do
docker exec -it my-container sudo service ssh restart
done
Возможно, вы захотитедобавить некоторые задержки сна, чтобы избежать перезапусков.Может быть, серверу ssh просто нужно некоторое время, чтобы принять соединения после перезапуска.