написать скрипт по SSH к удаленной машине и выполнения команд


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

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

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

5 69

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, чтобы получить помощь по этому вопросу)
  • Поместите все действия, которые должны быть выполнены на удаленном сервере в сценарий оболочки.
  • вызовите сценарий удаленной оболочки из сценария ожидания после успешного входа в систему.