Взгляните на это:
Допустим, у вас есть 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$>
Вы можете поместить свои команды в кавычки, как показано выше.
Таким образом, мы можем сделать желаемую операцию. Ура!
Эй. Спасибо за ответ. –
Сообщите мне, если это работает. – User9102d82
2 касается в этом: а) Что делать, если соединение SSH ломается? б) Как я могу сказать, что главный сервер запускает сценарий bash? Через PHP с помощью вызова exec()? –