Как я могу автоматизировать рабочие команды удаленно по SSH к нескольким серверам параллельно?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
19
задан rogerdpack 27 September 2017 в 18:00
поделиться

17 ответов

Часто, я буду просто использовать исходную версию Tcl, Ожидают. У Вас только должно быть это на локальной машине. Если я в программе с помощью Perl, я делаю это с Сеть:: SSH:: Ожидайте . Другие языки имеют подобный, "ожидают" инструменты.

9
ответ дан 30 November 2019 в 02:20
поделиться

Вот сценарий, чтобы сделать команду SSH на нескольких машинах, он может помочь:

#!/bin/bash
MACHINES="machine1 machine2 machine3 machine4 machine5 machine6"
for m in $MACHINES
do
        cmd="ssh $m '$*'"
        eval $cmd
done

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

-2
ответ дан 30 November 2019 в 02:20
поделиться

Я не уверен, будет ли этот метод работать на все, что Вы хотите, но можно попробовать что-то вроде этого:

$ cat your_script.sh | ssh your_host bash

, Который запустит скрипт (который находится локально) на удаленном сервере.

0
ответ дан 30 November 2019 в 02:20
поделиться

Вы хотите DSH или распределенную оболочку, которая используется в кластерах много. Вот ссылка: dsh

у Вас в основном есть группы узла (файл со списками узлов в них), и Вы указываете, на какой группе узла Вы желаете к командам выполнения затем, Вы использовали бы dsh, как Вы будет ssh к командам выполнения на них.

dsh -a /path/to/some/command/or/script

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

1
ответ дан 30 November 2019 в 02:20
поделиться

Хотя это - сложная тема, я могу настоятельно рекомендовать Capistrano.

1
ответ дан 30 November 2019 в 02:20
поделиться

Можно выполнить ту же команду на нескольких серверах сразу с инструментом как кластерный ssh. Ссылка к обсуждению кластера ssh на пакете Debian дневного блога.

1
ответ дан 30 November 2019 в 02:20
поделиться

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

Для SSH Вы обращаетесь: 1) не запрашиваются пароль (используйте ключи), 2) передайте команду (команды) командной строке SSH, это подобно rsh в надежной сети.

Другие сообщения показали Вам, что сделать, и я, вероятно, использовал бы sh также, но я испытаю желание использовать perl как ssh tomcatuser@server perl -e 'do-everything-on-one-line;', или Вы могли сделать это:

или scp the_package.tbz tomcatuser@server:the_place/.
ssh tomcatuser@server /bin/sh <<\EOF
определяют материал как [1 125] TOMCAT_WEBAPPS=/usr/local/share/tomcat/webapps
tar xj the_package.tbz , или rsync rsync://repository/the_package_place
mv $TOMCAT_WEBAPPS/old_war $TOMCAT_WEBAPPS/old_war.old
mv $THE_PLACE/new_war $TOMCAT_WEBAPPS/new_war
touch $TOMCAT_WEBAPPS/new_war [Вы не должны обычно перезапускать кота]
mv $THE_PLACE/vhost_file $APACHE_VHOST_DIR/vhost_file
$APACHECTL restart [возможно, должен был бы войти в систему как апачский пользователь для перемещения того файла и перезапуска]
EOF

1
ответ дан 30 November 2019 в 02:20
поделиться

Вы посмотрели на вещи как Марионетка или Cfengine. Они могут сделать то, что Вы хотите и вероятно намного больше.

2
ответ дан 30 November 2019 в 02:20
поделиться

Дать Вам структуру, без фактического кода.

  1. Использование scp для копирования сценария установки/установки в целевое поле.
  2. Использование ssh для вызова сценария на удаленное поле.
3
ответ дан 30 November 2019 в 02:20
поделиться

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

(Для моего собственного использования, я записал более простой маленький сценарий, очень похожий на один GavinCattell, это зарегистрировано здесь - на французском языке ).

2
ответ дан 30 November 2019 в 02:20
поделиться

Можно передать локальный сценарий по каналу к удаленному серверу и выполнить его с одной командой:

ssh -t user@host 'sh' < path_to_script

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

4
ответ дан 30 November 2019 в 02:20
поделиться

Смотрите на, Ожидают (man expect)

, я выполнил подобные задачи в прошлом использовании, Ожидают.

6
ответ дан 30 November 2019 в 02:20
поделиться

Проблема того, как к командам выполнения на многих серверах сразу подошел в списке рассылки Perl на днях и я дам ту же рекомендацию , которую я дал там , который должен использовать gsh:

http://outflux.net/unix/software/gsh

gsh подобен" for box in box1_name box2_name box3_name" решение уже, учитывая , но я нахожу, что gsh более удобен. Вы настраиваете/etc/ghosts файл, содержащий Ваши серверы в группах, таких как сеть, дб, RHEL4, x86_64, или безотносительно (фантомы человека) затем Вы используете ту группу при вызове gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

можно также объединить или разделить фантомные группы, с помощью web+db или сеть-RHEL4, например.

я также упомяну, что, в то время как я никогда не использовал shmux, , его веб-сайт содержит список программного обеспечения (включая gsh), который позволяет Вам команды выполнения на многих серверах сразу. Capistrano был уже упомянут и (от того, что я понимаю), мог быть в том списке также.

9
ответ дан 30 November 2019 в 02:20
поделиться

Можно запустить локальный скрипт как показано che и Yang, и/или можно использовать Здесь документ:

ssh root@server /bin/sh <<\EOF  
wget http://server/warfile    # Could use NFS here  
cp app.war /location  
command 1  
command 2  
/etc/init.d/httpd restart  
EOF 
11
ответ дан 30 November 2019 в 02:20
поделиться

Можно сделать это тот же способ, которым Вы сделали прежде, просто пишете сценарий его вместо того, чтобы делать его вручную. Следующие пульты ДУ кода к машине, названной 'loca' и выполнениями две команды там. То, что необходимо сделать, просто вставляют команды, которые Вы хотите выполнить туда.

che@ovecka ~ $ ssh loca 'uname -a; echo something_else'
Linux loca 2.6.25.9 #1 (blahblahblah)
something_else

Затем для итерации через все машины сделайте что-то как:

for box in box1_name box2_name box3_name
do
   ssh $box 'commmands_to_run_everywhere'
done

, Чтобы заставить эту ssh вещь работать, не вводя пароли все время, необходимо будет настроить ключевую аутентификацию. Можно читать об этом в IBM developerworks.

1
ответ дан 30 November 2019 в 02:20
поделиться

Вы можете попробовать paramiko . Это ssh-клиент на чистом питоне. Вы можете запрограммировать свои сеансы ssh. Нечего устанавливать на удаленные машины.

См. Эту отличную статью о том, как его использовать.

4
ответ дан 30 November 2019 в 02:20
поделиться

Multixterm отлично подходит для этого, и позволяет легко вернуть в последовательность 1 из n машин.

0
ответ дан 30 November 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: