написать скрипт по SSH к удаленной машине и выполнения команд
У меня есть два вопроса:
- есть несколько удаленных машин linux, и мне нужно написать сценарий оболочки, который будет выполнять один и тот же набор команд на каждой машине. (Включая некоторые операции sudo). Как это можно сделать с помощью сценариев оболочки?
- когда ssh'ING к удаленной машине, как обрабатывать, когда он запрашивает аутентификацию отпечатков пальцев RSA.
удаленные машины-это виртуальные машины, созданные на ходу, и у меня просто есть их IP-адреса. Так, Я не могу разместить файл сценария заранее в этих машинах и выполнить их с моей машины.
5 ответов:
есть несколько удаленных машин linux, и мне нужно написать сценарий оболочки, который будет выполнять один и тот же набор команд на каждой машине. (Включая некоторые операции 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 -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Это отключить проверку ключа хоста и автоматически добавить ключ хоста в список известных хостов. Если вы не хотите, чтобы хост был добавлен в известный файл hosts, добавьте опцию
-o UserKnownHostsFile=/dev/null
.обратите внимание, что это отключает некоторые проверки безопасности, например защита от нападения человека в середине. Поэтому он не должен применяться с учетом безопасности окружающей среды.
есть несколько способов справиться с этим.
мой любимый способ-установить http://pamsshagentauth.sourceforge.net/ на удаленных системах, а также ваш собственный открытый ключ. (Выясните, как установить их на виртуальную машину, каким-то образом вы установили всю систему Unix, что такое еще несколько файлов?)
С вашим агентом ssh пересылается, теперь вы можете войти в каждую систему без пароля.
и даже лучше, что модуль для pam аутентификация для sudo с помощью пары ключей ssh, чтобы вы могли работать с правами root (или любого другого пользователя) по мере необходимости.
вам не нужно беспокоиться о взаимодействии ключа хоста. Если вход не является терминалом, то ssh просто ограничит вашу способность пересылать агенты и аутентифицироваться с помощью паролей.
вы также должны заглянуть в пакеты как Капистрано. определенно посмотрите вокруг этого сайта; у него есть введение в remote описание.
отдельные строки скрипта могут выглядеть примерно так:
ssh remote-system-name command arguments ... # so, for exmaple, ssh target.mycorp.net sudo puppet apply
установить sshpass с помощью,
apt-get install sshpass
затем отредактируйте сценарий и поместите свои компьютеры linux IPs, имена пользователей и пароль в соответствующем порядке. После этого запустите этот скрипт. Вот так ! Этот скрипт установит 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
Если вы можете написать код Perl, то вы должны рассмотреть возможность использования Net:: OpenSSH:: Parallel.
вы сможете описывать действия, которые должны выполняться на каждом хосте декларативно, и модуль позаботится обо всех страшных деталях. Запуск команд через
sudo
также поддерживается.
вы можете следовать этому подходу:
- подключиться к удаленной машине с помощью Ожидаем Скрипт. Если ваша машина не поддерживает ожидать, что вы можете скачать то же самое. Написание сценария ожидания очень легко (google, чтобы получить помощь по этому вопросу)
- Поместите все действия, которые должны быть выполнены на удаленном сервере в сценарий оболочки.
- вызовите сценарий удаленной оболочки из сценария ожидания после успешного входа в систему.