Иногда я перезагружаю устройство и мне нужно ssh
вернуться, когда оно будет готово.
Я хочу запускать команду ssh каждые 5 секунд, пока команда не будет выполнена успешно.
Моя первая попытка:
watch -n5 ssh me@device.local && exit 1
Как я могу это сделать?
Ответы:
Другой вариант будет использовать
until
.Если вы делаете это несколько раз для нескольких хостов, поместите это в функцию в вашем
~/.bashrc
.источник
$
вместо подсказки :-)ssh
после успешного подключения может выйти с ненулевым состоянием, если что-то внешнее по отношению к соединению завершит сеанс, и в этом случае этот сценарий попытается восстановить соединение. Это может или не может быть желательным побочным эффектом.!!
Повторить последнюю команду.источник
OpenSSH имеет
ConnectionAttempts
настройку, которая делает почти то, что вы хотите. По умолчанию это 1, но вы можете изменить его вssh_config
командной строке или в командной строке:К сожалению, вы не можете настроить интервал попыток, который установлен равным 1 секунде, но вы можете настроить время ожидания попытки подключения
ConnectTimeout
(в секундах) таким же образом.источник
источник
while ! nc -w5 -z host.example.com 22; do [...]
.autossh
поддерживает сессию SSH С правильными параметрами вы также можете запустить его, когда в настоящее время невозможно подключиться, и он будет пытаться, пока не получится. Это прекрасно работает, но если вы хотите, чтобы часть повторного подключения хорошо работала с интерактивными сеансами, вам нужно объединить ееscreen
или эквивалентную.Я рекомендую это:
Но смотрите его справочную страницу для деталей. С указанными выше параметрами
autossh
будет пытаться запускать ssh каждуюAUTOSSH_POLL
секунду,AUTOSSH_GATETIME=0
повторять попытку, если первая попытка не удалась (именно то, что вам нужно),-M 0
отключить проверку соединения с помощью autossh, все последующие опции передаются в ssh. Эти две-o
опции заставляют ssh выйти, если соединения разрываются более чем на 5 секунд.источник
С риском просто бросить код в ответ, этот скрипт работает для меня ежедневно. Я называю это,
ressh
и это может использоваться так же простоressh {hostname}
, или с осторожностью,ressh -S {session_name} {hostname}
источник