Как запустить локальный сценарий оболочки на удаленном сервере 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
ожидает любого стандартного ввода. Директива <
Это означает, что вы можете хранить все в одном файле сценария, а не создавать новый для запуска на удаленном компьютере.