2016-10-06 3 views
0

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

Что можно было бы запустить сценарий bash на удаленном сервере, когда я получу команду на моем основном сервере приложений?

P.S. Для сценария bash необходимо выполнить некоторые задачи, которые может выполнять только пользователь root, например перезапустить NGINX.

ответ

2

Взгляните на это:

Допустим, у вас есть 2 сервера, A и B. Вы хотите запустить Баш скрипт на B, когда вы получите команду А.

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

# Setting up auto ssh from A to B. Execute below commands from Server A. 

cat ~/.ssh/id_pub.rsa | ssh [email protected]_of_B ">> ~/.ssh/authorized_keys" 
ssh [email protected]_of_B "chmod 640 ~/.ssh/authorized_keys ; chmod 700 ~/.ssh" 

Над шага предполагает, что сервер А имеет правильную установку разрешений каталогов и сервер B имеет стандартную конфигурацию SSH (что позволяет для автоматического SSH, чтобы конфигурировать и использовать [ «PubkeyAuthentication да»]

Поскольку у вас есть не упомянуто, как вы собираетесь обрабатывать команду на A, я предполагаю, что у вас есть файл журнала, и мы можем прочитать из файла журнала, чтобы вызвать скрипт на A, который будет вызывать скрипт на B.

Вот мой uname -a и hostname, для справки. На данный момент это наш сервер A.

bash$> uname -a 
Linux STATION.84station.com 3.10.0-327.36.1.el7.x86_64 #1 SMP Sun Sep 18 13:04:29 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 
bash$> hostname 
STATION.84station.com 
bash$> 

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

# Reading logfile on A, invoke a script on A to invoke a script on server B. 

bash$> tail -f logfile |perl -nle 'if (m/2559/) {system("./a.sh")} ' 

SunOS solaris 5.10 Generic_147148-26 i86pc i386 i86pc 

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1 
     inet 127.0.0.1 netmask ff000000 
e1000g0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2 
     inet 192.168.2.135 netmask ffffff00 broadcast 192.168.2.255 

-rwxr-xr-x 1 gaurav other   53 Oct 6 21:04 /export/home/b.sh 
^C 
bash$> 

на сервере А, файл_журнала читается, подается на PERL фильтр, который ищет ключевого слова «2559», и как только он соответствует, он вызывает сценарий на А, то есть «A.Sh », который входит в систему B и выполняет сценарий« b.sh »в B, а его вывод отображается на A. Вы можете поместить другой скрипт внутри« b.sh »для выполнения чего-то еще или чего хотите.

Вот a.sh на А, который вызывает b.sh на B.

bash$> cat a.sh 
#!/bin/bash 

ssh [email protected] " 

uname -a 
echo 
/usr/sbin/ifconfig -a 
echo 
ls -lrtha /export/home/b.sh 

" 
bash$> 

Вы можете поместить свои команды в кавычки, как показано выше.

Таким образом, мы можем сделать желаемую операцию. Ура!

+0

Эй. Спасибо за ответ. –

+0

Сообщите мне, если это работает. – User9102d82

+0

2 касается в этом: а) Что делать, если соединение SSH ломается? б) Как я могу сказать, что главный сервер запускает сценарий bash? Через PHP с помощью вызова exec()? –

Смежные вопросы