Инициировать скрипт сервера с ноутбука

У меня есть сервер, на котором я могу отправить ssh с моего ноутбука.

Я хочу, чтобы иметь возможность запускать сценарий на моем ноутбуке, который посылает сигнал серверу, который заставляет сервер инициировать данный сценарий там.

Как мне это сделать?

 ssh remotehost 'command1 ; command ; command3' 

Или, если вы только хотите запустить command2, если command1 удалось, и command3, если command2 удалось:

 ssh remotehost 'command1 && command && command3' 

Обратите внимание, что вам нужно будет уделить особое внимание проблемам с цитированием оболочки, они могут стать очень сложными, когда вы вводите команду в своей локальной оболочке для выполнения команд на удаленной оболочке (они могут стать достаточно плохими даже при работе с локальным оболочка). Например, рассмотрим разницу между следующими двумя командами:

 ssh remotehost 'ps hu -Csshd | awk "{print \$2}"' ssh remotehost 'ps hu -Csshd | awk "{print $2}"' 

Первый печатает только PIDs процессов sshd. Второй печатает полный список SSH-процессов с полным списком хостов – unescaped $ 2 – пустая строка, поэтому команда awk становится просто {print }

Третий вариант – запустить ps на удаленном хосте и awk локально:

 ssh remotehost ps hu -Csshd | awk '{print $2}' 

В приведенных выше двух командах вся строка с кавычками выполняется на удаленном узле, потому что это аргумент, который вы передали команде ssh. В этом примере все до | выполняется снова (опять же потому, что «ps», «hu» и «-Csshd» являются аргументами команды ssh, а остальная часть строки выполняется локально.

Для задач, которые сложнее, чем вы хотите запускать с одним слоем (или когда коллирование оболочки становится адским), вы можете написать сценарий оболочки и скопировать его на удаленный хост, а затем выполнить его с помощью ssh:

 vi myscript.sh chmod +x myscript.sh scp myscript.sh remotehost:/usr/local/bin/ ssh remotehost myscript.sh 

Вы можете скопировать сценарий в любом месте, но вам нужно писать запись в каталог, b) он не может быть на файловой системе, установленной с noexec (не является обычным, но иногда / tmp монтируется noexec), если вы не запускаете его с помощью "/ path / to / interpreter / path / to / script" – например /bin/bash /tmp/myscript.sh