
Мой домашний компьютер, Mac с OS X 10.8.5, обычно принимает SSH-подключения через Интернет (у меня перенаправлен порт), но сейчас он спит. Иногда он может просыпаться по разным причинам, когда я не дома. Я хочу отправить ему несколько SSH-команд, но не могу сидеть и продолжать пытаться, пока он не проснется.
Есть ли простой, не AppleScript способ отложить SSH-подключение, аутентификацию по паролю и ввод команд до ответа хост-компьютера? Я использую Mac вне дома, но хотел бы узнать, как это сделать на любой ОС на базе Unix. Обычно тайм-аут наступает примерно через минуту после попытки подключения.
Я знаю, что в большинстве эмуляторов терминала можно вводить команды во время работы блокирующих процессов, и они будут выполнены после завершения этих процессов. Например, можно вводить команды git push foo
сразу после git commit -a -m "foo"
того, как while git commit -a -m "foo"
все еще выполняется; git выполнит push, как только завершит коммит. Я подумал, что может быть какая-то хитрость, чтобы сделать что-то подобное с помощью ssh через эмулятор терминала.
решение1
Вы можете проверить с помощью ping, загрузилась ли ваша машина, а затем запустить одну или несколько команд ssh. Обратите внимание, что вам нужно будет настроить аутентификацию на основе сертификатов на вашем хосте. Вот небольшой скрипт на основе BASH GNU/Linux, но я думаю, вы можете преобразовать его в любой, который использует 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, и если вы хотите использовать параметры, вам нужно заключить команду в кавычки. Если вы собираетесь выполнять одни и те же команды все время, возможно, скрипт на вашей домашней машине подойдет.