Альтернативные способы выдачи нескольких команд на удаленной машине с использованием SSH? - PullRequest
5 голосов
/ 15 июля 2011

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

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

То, что я в идеале хотел бы, очень похоже на взаимодействие с интерактивной оболочкой: в какой-то момент сценария вы вводите ssh в @ the_remote_server и запрашивает пароль, который вывведите (в интерактивном режиме), а затем с этого момента, пока ваш сценарий не выполнит команду «exit», все команды в сценарии интерпретируются на удаленном компьютере.

Конечно, это не работает:

ssh user@host.com
  cd some/dir/on/remote/machine
  tar -xzf my_tarball.tgz
  cd some/other/dir/on/remote
  cp -R some_directory somewhere_else
exit

Есть ли другая альтернатива?Я полагаю, я мог бы взять эту часть прямо из моего сценария и вставить ее в сценарий на удаленном хосте.Мех.Сейчас я поддерживаю два сценария.Кроме того, я хочу, чтобы небольшой файл конфигурации содержал значения по умолчанию и другие вещи, и я не хочу поддерживать его в двух местах.

Есть ли другое решение?

Ответы [ 2 ]

9 голосов
/ 15 июля 2011

Используйте heredoc.

ssh user@host.com << EOF
cd some/dir/on/remote/machine
tar -xzf my_tarball.tgz
cd some/other/dir/on/remote
cp -R some_directory somewhere_else
EOF
3 голосов
/ 15 июля 2011

Использовать синтаксис heredoc, например

ssh user@host.com <<EOD
 cd some/dir/on/remote/machine
 ...
EOD

или труба, как

echo "ls -al" | ssh user@host.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...