Я выполняю сценарий подключения через SSH без пароля на удаленном хосте. Я хочу установить тайм-аут, чтобы, если удаленный хост работал бесконечно долго, я хотел выйти из этого сеанса ssh и продолжить другие строки в моем скрипте sh.
Есть идеи, как это сделать?
ssh
сеансе больше времени » (вопрос «Как увеличить время ожидания соединения SSH?»), Это неправильное место . Ответ по этой ссылке о ssh-timeout .Ответы:
Где 10 - время в секундах. Этот тайм-аут относится только к созданию соединения.
источник
Используйте
-o ConnectTimeout
и-o BatchMode=yes -o StrictHostKeyChecking=no
.ConnectTimeout предотвращает зависание скрипта, BatchMode предотвращает его зависание при неизвестном хосте, YES для добавления в known_hosts, а StrictHostKeyChecking автоматически добавляет отпечаток пальца.
**** ПРИМЕЧАНИЕ **** «StrictHostKeyChecking» предназначался только для внутренних сетей, где вы доверяете своим хостам. В зависимости от версии клиента SSH сообщение «Вы уверены, что хотите добавить свой отпечаток» может привести к зависанию клиента на неопределенное время (в основном это старые версии, работающие в AIX). Большинство современных версий не страдают от этой проблемы. Если вам приходится иметь дело с отпечатками пальцев на нескольких хостах, я рекомендую поддерживать файл known_hosts с помощью какого-либо инструмента управления конфигурацией, такого как puppet / ansible / chef / salt / etc.
источник
-o StrictHostKeyChecking=no
не решает вопрос, но это ужасная идея, если вы заботитесь о безопасности, что может быть причиной того, что вы используете SSH в первую очередь.StrictHostKeyChecking=no
если вы вообще заботитесь о безопасности. @Doug: скрипт не будет зависать - он просто будет настаивать на том, чтобы вы сначала подключились к удаленному хосту вручную, чтобы он узнал хост. Но это защитит вас от атак MITM. Пожалуйста, отредактируйте этот ответ, чтобы отразить это, так как это очень опасный совет. И это даже не просили.попробуй это:
timeout выполняет команду ssh (с аргументами) и отправляет SIGTERM, если ssh не возвращается через 5 секунд. для получения более подробной информации о тайм-ауте, прочитайте этот документ: http://man7.org/linux/man-pages/man1/timeout.1.html
или вы можете использовать параметр ssh:
источник
brew install coreutils
и затем используйтеgtimeout
(источник: stackoverflow.com/questions/3504945/timeout-command-on-mac-os-x ).timeout 3s ssh user@server 'sleep 5; echo blarg >> /tmp/blarg'
Это убивает процесс на стороне клиента SSH, но / tmp / blarg по-прежнему изменяется на удаленном сервере. Это означает, что, если вы выполняете на удаленном сервере невыполненную работу с интенсивным использованием ЦП, вы будете пропускать процессы.Вы также можете связаться с флагом
поэтому SSH-клиент будет отправлять нулевой пакет на сервер каждую<secs>
секунду, чтобы поддерживать соединение. В Linux это также может быть установлено глобально/etc/ssh/ssh_config
или для каждого пользователя~/.ssh/config
.источник
Если все остальное терпит неудачу (включая отсутствие
timeout
команды), концепция в этом сценарии оболочки будет работать:источник
Ну, вы могли бы использовать nohup для запуска того, что вы используете в «неблокирующем режиме». Таким образом, вы можете просто продолжать проверять, запускается ли то, что должно было выполняться, иначе выходите.
Итак, во втором вы просто проверьте, существует ли файл.
источник