Поиск по сайту:

Как запустить локальный сценарий оболочки на удаленном сервере SSH


Проблема с запуском команд через SSH заключается в том, что обычно вам приходится либо вводить их самостоятельно, либо загружать файл сценария. Однако, обладая некоторыми знаниями bash, вы можете передавать целые скрипты по SSH, не имея файла .sh на удаленном компьютере.

Решение: передать сценарий через стандартный ввод

У команды SSH есть режим, в котором вы можете запустить любую команду на удаленном сервере. Чтобы запустить несколько команд, вам придется использовать следующий хак:

ssh user@remotehost 'bash -s' < script.sh

Команда bash -s означает «выполнить следующие команды в новом сеансе bash». Флаг -s заставляет его читать из стандартного ввода, а бит  будет считывать локальный файл сценария в стандартный ввод.

Файл читается полностью локально, и все отправляется на удаленный сервер без загрузки чего-либо. Это требует, чтобы вы поместили все команды в отдельный файл сценария.

Запуск многих удаленных команд внутри скрипта

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

ssh user@remotehost 'bash -s' <<'ENDSSH'
  # The following commands run on the remote host
  echo "test"
  cd /home/
  pwd
ENDSSH

Это работает, потому что bash -s ожидает любого стандартного ввода. Директива < создает структуру «здесь-документ», в основном передавая все символы между ней и окончанием «ENDSSH» на стандартный ввод и, следовательно, на удаленный хост по SSH.

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




Все права защищены. © Linux-Console.net • 2019-2024