У меня два вопроса:
- Существует несколько удаленных компьютеров с Linux, и мне нужно написать сценарий оболочки, который будет выполнять один и тот же набор команд на каждой машине. (Включая некоторые операции sudo). Как это можно сделать с помощью сценариев оболочки?
- Когда ssh'ing к удаленному компьютеру, как обрабатывать, когда он запрашивает аутентификацию по отпечатку пальца RSA.
Удаленные машины - это виртуальные машины, созданные на ходу, и у меня есть только их IP-адреса. Итак, я не могу заранее разместить файл сценария на этих машинах и выполнить их со своей машины.
expect
как `expect" ? assword: "`Ответы:
Вы можете сделать это с помощью ssh, например:
Вы можете добавить
StrictHostKeyChecking=no
параметр в ssh:Это отключит проверку ключа хоста и автоматически добавит ключ хоста в список известных хостов. Если вы не хотите, чтобы хост добавлялся в файл известных хостов, добавьте эту опцию
-o UserKnownHostsFile=/dev/null
.Обратите внимание, что это отключает определенные проверки безопасности , например защиту от атаки «злоумышленник посередине». Поэтому его не следует применять в среде, чувствительной к безопасности.
источник
ssh
из любого сценария оболочкиЕсть несколько способов справиться с этим.
Мой любимый способ - установить http://pamsshagentauth.sourceforge.net/ в удаленных системах, а также ваш собственный открытый ключ. (Придумайте способ установить их на виртуальную машину, каким-то образом у вас установлена вся система Unix, какие еще файлы?)
Теперь, когда ваш ssh-агент перенаправлен, вы можете входить в любую систему без пароля.
И что еще лучше, этот модуль pam будет аутентифицироваться для sudo с вашей парой ключей ssh, поэтому вы можете работать с правами root (или любого другого пользователя) по мере необходимости.
Вам не нужно беспокоиться о взаимодействии ключа хоста. Если вход не является терминалом, тогда ssh просто ограничит вашу способность пересылать агентов и аутентифицироваться с помощью паролей.
Вам также следует изучить такие пакеты, как Capistrano. Обязательно посмотрите на этот сайт; в нем есть введение в удаленное создание сценариев.
Отдельные строки скрипта могут выглядеть примерно так:
источник
Установите sshpass с помощью,
apt-get install sshpass
затем отредактируйте сценарий и поместите IP-адреса ваших Linux-машин, имена пользователей и пароль в соответствующем порядке. После этого запустите этот скрипт. Это оно ! Этот скрипт установит VLC во все системы.источник
Если вы умеете писать код Perl, вам следует рассмотреть возможность использования Net :: OpenSSH :: Parallel .
Вы сможете описать действия, которые должны выполняться на каждом хосте, декларативно, а модуль позаботится обо всех пугающих деталях.
sudo
Также поддерживается выполнение команд .источник
Эта работа для меня.
Синтаксис: ssh -i pemfile.pem имя_пользователя @ ip_address 'command_1; команда 2; команда 3 '
источник
Для такого рода задач я неоднократно использую Ansible, который позволяет последовательно дублировать сценарии bash в нескольких контейнерах или виртуальной машине. У Ansible (точнее, Red Hat ) теперь есть дополнительный веб-интерфейс AWX, который представляет собой версию с открытым исходным кодом их коммерческой Tower.
Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible Tower: коммерческий продукт, вы, вероятно, сначала изучите бесплатный AWX с открытым исходным кодом, а не 15 дней бесплатного использования. Башни
источник
Есть несколько способов выполнить команды или сценарий на нескольких удаленных машинах Linux. Один простой и легкий способ - через pssh (параллельная программа ssh)
pssh : это программа для параллельного выполнения ssh на нескольких хостах. Он предоставляет такие функции, как отправка входных данных всем процессам, передача пароля по ssh, сохранение вывода в файлы и тайм-аут.
Пример и использование:
подключитесь к host1 и host2 и выведите «hello, world» из каждого:
Запускайте команды через скрипт на нескольких серверах:
Использование и запуск команды без проверки или сохранения ключей хоста:
Если файл hosts.txt имеет большое количество записей, скажем 100, тогда параметр параллелизма также может быть установлен на 100, чтобы гарантировать, что команды выполняются одновременно:
Параметры :
-I: читать ввод и отправлять каждому процессу ssh.
-P: указывает pssh отображать вывод по мере его поступления.
-h: читает файл хоста.
-H: [пользователь @] хост [: порт] для одиночного хоста.
-i: отображать стандартный вывод и стандартную ошибку при завершении каждого хоста
-x args: передает дополнительные аргументы командной строки SSH
-o option: может использоваться для предоставления параметров в формате, используемом в файле конфигурации. (/ etc / ssh / ssh_config ) (~ / .ssh / config)
-p parallelism: использовать данное число как максимальное количество одновременных подключений
-q Тихий режим: подавляет большинство предупреждающих и диагностических сообщений.
-t: установить тайм-аут соединения через заданное количество секунд. 0 означает, что pssh не будет тайм-аут для подключения
Отключите StrictHostKeyChecking для обработки запроса проверки подлинности RSA.
-o StrictHostKeyChecking = нет
Источник : man pssh
источник
Это сработало для меня. Я выполнил функцию. Поместите это в свой сценарий оболочки:
Если у вас есть несколько компьютеров, на которых вы хотите выполнить одну и ту же команду, повторите эту строку с точкой с запятой. Например, если у вас две машины, вы бы сделали это:
Замените USER на пользователя компьютера. Замените HOST именем компьютера. Замените COMMAND на команду, которую вы хотите выполнить на компьютере.
Надеюсь это поможет!
источник
Вы можете следовать этому подходу:
источник