Подтвердить что ты не робот

Написать оболочку script в ssh на удаленную машину и выполнить команды

У меня есть два вопроса:

  • Существует несколько удаленных Linux-машин, и мне нужно написать оболочку script, которая будет выполнять тот же набор команд на каждой машине. (Включая некоторые операции sudo). Как это можно сделать с помощью сценариев оболочки?
  • Когда ssh'ing на удаленном компьютере, как обращаться, когда он запрашивает аутентификацию отпечатка RSA.

Удаленные компьютеры - это виртуальные машины, созданные на ходу, и у меня есть только их IP-адреса. Поэтому я не могу разместить файл script заранее на этих машинах и выполнить их с моей машины.

4b9b3361

Ответ 1

Существует несколько удаленных Linux-машин, и мне нужно написать оболочку script, которая будет выполнять тот же набор команд на каждом компьютере. (Включая некоторые операции sudo). Как это можно сделать с помощью сценариев оболочки?

Вы можете сделать это с помощью ssh, например:

#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done

Когда ssh'ing на удаленном компьютере, как обращаться, когда он запрашивает аутентификацию отпечатка RSA.

Вы можете добавить опцию StrictHostKeyChecking=no в ssh:

ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"

Это будет отключить проверку ключа хоста и автоматически добавить ключ хоста в список известных хостов. Если вы не хотите, чтобы хост добавлен в файл известных хостов, добавьте опцию -o UserKnownHostsFile=/dev/null.

Обратите внимание, что этот отключает определенные проверки безопасности, например защиту от атаки "человек-в-середине". Поэтому он не должен применяться в чувствительной к безопасности среде.

Ответ 2

Существует несколько способов справиться с этим.

Мой любимый способ - установить http://pamsshagentauth.sourceforge.net/ в удаленных системах, а также ваш собственный открытый ключ. (Подумайте, как установить их на виртуальной машине, каким-то образом у вас установлена ​​вся система Unix, что еще несколько файлов?)

При пересылке вашего агента ssh вы можете войти в систему без пароля.

И даже лучше, что модуль pam будет аутентифицироваться для sudo с вашей парой ключей ssh, чтобы вы могли работать с правами root (или любыми другими пользователями) по мере необходимости.

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

Вы также должны посмотреть в пакеты как Capistrano. Определенно осмотрите этот сайт; он имеет введение в удаленный сценарий.

Личные script строки могут выглядеть примерно так:

ssh remote-system-name command arguments ... # so, for exmaple,
ssh target.mycorp.net sudo puppet apply

Ответ 3

Установите sshpass с помощью apt-get install sshpass, затем отредактируйте script и поместите свои IP-адреса, имена пользователей и пароль в Linux в соответствующем порядке. После этого запустите script. Это оно! Этот script установит VLC во всех системах.

#!/bin/bash
SCRIPT="cd Desktop; pwd;  echo -e 'PASSWORD' | sudo -S apt-get install vlc"
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
USERNAMES=("username1" "username2" "username3")
PASSWORDS=("password1" "password2" "password3")
for i in ${!HOSTS[*]} ; do
     echo ${HOSTS[i]}
     SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
     sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done

Ответ 4

Если вы можете написать Perl-код, вам следует рассмотреть возможность использования Net:: OpenSSH:: Parallel.

Вы могли бы описать действия, которые должны выполняться на каждом узле декларативным образом, и модуль позаботится обо всех страшных деталях. Также поддерживаются команды с помощью sudo.

Ответ 5

Для такого рода задач я многократно использую Ansible, который позволяет согласованно дублировать скрипты bash в нескольких контейнерах или виртуальных машинах. Ansible (точнее, Red Hat) теперь имеет дополнительный веб-интерфейс AWX, который является версией их коммерческой башни с открытым исходным кодом.

Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible Tower: коммерческий продукт, вы, вероятно, впервые исследуете бесплатный AWX с открытым исходным кодом, а не 15-дневный бесплатный маршрут Tower

Ответ 6

Вы можете следовать этому подходу:

  • Подключитесь к удаленному компьютеру с помощью Ожидайте Script. Если ваша машина не поддерживает ожидание, вы можете загрузить ее. Письмо Ожидание script очень просто (google, чтобы получить справку об этом)
  • Поместите все действия, которые необходимо выполнить на удаленном сервере в оболочке script.
  • Вызов удаленной оболочки script из ожидаемого script после успешного входа в систему.