Назад | Перейти на главную страницу

Сервер A сообщает серверу B выполнить сценарий оболочки - самый простой способ?

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

Скажем, у меня есть серверы Linux A и B, где на сервере A есть веб-приложение, а на сервере B нет.

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

mkdir /var/www/git/repo-1.git
cd /var/www/git/repo-1.git
git --bare init

Каким самым простым способом заставить сервер A сказать серверу B выполнить эти команды?

FWIW, безопасность - это важный фактор в любом решении, которое я использую.

Вы можете просто использовать SSH. Обычно вы используете пару открытого / закрытого ключей, чтобы позволить ведущему устройству войти в ведомое устройство без необходимости ввода пароля.

Затем используйте

   SSH user@slave.IP  "command"

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

Есть также много других решений, большинство из которых либо используют агентов (например, puppet или chef), либо расширяют функциональность SSH (например, ansible). В зависимости от вашего определения простейшего, SSH, вероятно, является лучшим кандидатом.

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

Самый простой способ, если у вас есть доступ по ssh.

Сделайте это на терминале serverA:

$ cat > script.sh                 
cat /proc/sys/kernel/hostname
^C

$ scp script.sh serverB:~
script.sh    100%   31     9.8KB/s   00:00

$ ssh serverB 'sh ~/script.sh'
serverB

самый простой способ? если на A есть веб-приложение, сделайте так, чтобы на сервере A был URL-адрес, который сервер B может запрашивать, например blah.html? shouldidothatthing, что возвращает «да» или «нет». затем пусть сервер B опросит его в цикле.

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

По сути, не толкайся между ними, не тяни.