Назад | Перейти на главную страницу

Можно и как запустить команду на удаленном сервере через bash скрипт?

Я чувствую себя немного глупо, задавая вопрос, который может показаться подходящим для Google, но я пытаюсь записать повторяющуюся задачу (1) ssh'ing на удаленный сервер (2) с запуском script.sh в моем домашнем каталоге, и (3) копирование / вставка вывода.

Было бы здорово, если бы я мог написать сценарий, который сделает эту работу за меня. Я написал несколько сценариев bash, которые scp файлы с этих машин, но никогда не запускал сценарии на этих машинах.

Возможно ли иметь скрипт на машине 1 и войти в систему и выполнить script.sh на машине 2 через машину пСбрасывает вывод на машину 1? Если да, то как?

Это просто:

ssh пользователь @ хост команда

команда = дополнить трубами и т.п. по мере необходимости.

Подобно ответу Джеффри, но с однострочным циклом.

for i in "server1 server2 otherserver"; do ( ssh username@$i yourcommand & ); done

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

  • Реализуйте вход без пароля (желательно!)
  • Избавьтесь от амперсанда (&) и каждый раз вводите пароль
  • Укажите пароль в командной строке (включен только для полноты - пожалуйста, не надо!)

Поэтому я думаю, что реальный вопрос здесь в том, как перенести сценарий с машины 1 на машину 2, чтобы вы могли его выполнить, верно? Есть несколько способов сделать это. Вы можете использовать сценарий на компьютере 1, который сначала использует scp для передачи файла сценария. script к машине 2, а затем работает ssh machine2 script.

Это хорошо работает, если у вас настроена аутентификация с открытым ключом, поэтому вам не нужно будет вводить пароли. Если вам нужно вводить пароль каждый раз, когда вы входите в machine2, вам нужно изучить подходы с использованием expect, как подробно описано в эта публикация stackoverflow. Вы должны иметь возможность использовать autoexpect для быстрого написания необходимого сценария ожидания.

Другие подходы включают в себя nfs-монтирование общего каталога на всех хостах. В этом сценарии вы копируете файл сценария в этот каталог на машине1, а затем он становится доступным на машине2 и всех других машинах, подключенных к тому же монтированию nfs.

Наконец, это проблема, которую инструменты управления конфигурацией, такие как cfengine и кукольный решить с помощью какого-то механизма доставки файлов. В этой настройке клиентские машины подключаются к центральному серверу и загружают файл сценария перед его выполнением.