1

Мой домашний компьютер, Mac под управлением OS X 10.8.5, обычно принимает соединения SSH через Интернет (у меня переадресован порт), но сейчас спит. Иногда я могу проснуться по разным причинам, пока меня нет дома. Я хочу послать ему несколько команд SSH, но не могу сидеть и продолжать попытки, пока он не проснется.

Существует ли простой, не AppleScript способ задержки подключения SSH, аутентификации по паролю и ввода команд до тех пор, пока хост-компьютер не ответит? Я использую Mac вдали от дома, но я хотел бы знать, как это сделать на любой ОС на базе Unix. Обычно это происходит через минуту или около того после попытки подключения.

Я знаю, что в большинстве эмуляторов терминалов вы можете вводить команды во время блокирования процессов, и они будут выполняться после завершения этих процессов. Например, введите git push foo сразу после git commit -a -m "foo" пока git commit -a -m "foo" все еще работает; мерзавец будет толкать, как только это будет сделано. Я думал, что может быть какая-то хитрость, чтобы сделать что-то подобное с ssh через эмулятор терминала.

1 ответ1

1

Вы можете проверить с помощью ping, работает ли ваша машина, а затем запустить одну или несколько команд ssh. Обратите внимание, что вам нужно настроить аутентификацию на основе сертификатов на вашем хосте. Вот небольшой скрипт, основанный на GNU/Linux 'BASH, но я думаю, вы можете конвертировать его во все, что использует Mac OS X.

#/bin/bash   
hostup=0
while [ $hostup -ne 1 ]; do
    ping -c 4 <hostname or IP>
    if [ $? -eq  0 ]; then
        ssh username@hostname <command to execute>
        hostup=1;
done

Только одна команда на строку SSH, и если вы хотите использовать параметры, вы должны указать свою команду в кавычках. Если вы собираетесь выполнять одни и те же команды все время, возможно, сценарий на вашем домашнем компьютере в порядке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .