Как вы используете SSH в сценарии оболочки? - PullRequest
15 голосов
/ 27 августа 2008

Когда я пытаюсь использовать команду ssh в сценарии оболочки, эта команда просто сидит там. У вас есть пример использования ssh в скрипте оболочки?

Ответы [ 5 ]

32 голосов
/ 27 августа 2008

Зависит от того, что вы хотите сделать, и как вы его используете. Если вы просто хотите выполнить команду удаленно и безопасно на другом компьютере, просто используйте

ssh user@host command

например

ssh user@host ls

Чтобы сделать это безопасно, вам нужно либо попросить пользователя ввести пароль во время выполнения, либо настроить ключи на удаленном хосте.

21 голосов
/ 27 августа 2008

Во-первых, вам нужно убедиться, что вы настроили пароль (вход с открытым ключом). Существует как минимум два варианта ssh с немного разными форматами файлов конфигурации. Посетите справочную страницу ssh в своей системе, проконсультируйтесь с местным системным администратором или зайдите на Как настроить аутентификацию с открытым ключом? .

Чтобы запустить ssh в пакетном режиме (например, в сценарии оболочки), вам нужно передать команду, которую вы хотите запустить. Синтаксис:

ssh host command

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

ssh host "command1; command2"

Кавычки необходимы для защиты точек с запятой от интерпретатора оболочки. Если вы их пропустите, только первая команда будет выполняться удаленно, а все остальные будут выполняться на локальном компьютере.

1 голос
/ 27 августа 2008

Вам необходимо поместить открытый ключ SSH в файл ~/.ssh/authorized_keys на удаленном хосте. Тогда вы сможете использовать SSH для этого хоста без пароля.

В качестве альтернативы вы можете использовать ssh-agent. Я бы не рекомендовал хранить пароль в скрипте.

1 голос
/ 27 августа 2008

Вы можете использовать команду expect для заполнения имени пользователя / пароля.

0 голосов
/ 27 августа 2008

Самый простой способ - использовать сертификат для пользователя, который запускает скрипт.

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

...