TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #520 840
Сравнение конфигураций сервиса между серверами

Классическая ситуация: на одном сервере все работает. На другом - нет. При этом версии одинаковые, ОС одинаковая, но потом спустя время выясняется: конфиг отличается на одну строку.

😁Задача

Сравнить конфигурации одного сервиса между серверами:

nginx.conf
sshd_config
app.conf

Быстро. Чисто. Без копипасты глазами.


1️⃣ Самый простой способ - diff через SSH


ssh server1 "cat /etc/nginx/nginx.conf" > s1.conf
ssh server2 "cat /etc/nginx/nginx.conf" > s2.conf

diff -u s1.conf s2.conf


Но это неудобно и мусорно.

Лучше сразу:


diff -u \
<(ssh server1 "cat /etc/nginx/nginx.conf") \
<(ssh server2 "cat /etc/nginx/nginx.conf")


Чисто. Без временных файлов.

2️⃣ Игнорировать комментарии и пустые строки. Очень часто различия только в комментариях.


diff -u \
<(ssh s1 "grep -vE '^\s*#|^\s*$' /etc/ssh/sshd_config") \
<(ssh s2 "grep -vE '^\s*#|^\s*$' /etc/ssh/sshd_config")


Теперь сравнивается только реальная логика.

3️⃣ Если это nginx - сравнивать весь effective config. У nginx часто include-файлы.

Правильнее:


ssh s1 "nginx -T" > s1.nginx
ssh s2 "nginx -T" > s2.nginx

diff -u s1.nginx s2.nginx


Так мы сравниваем итоговую конфигурацию.

4️⃣ Проверка sshd. У ssh есть удобная команда:


sshd -T


Она выводит итоговую конфигурацию с учетом defaults. Сравниваем так же через process substitution.

5️⃣ Если серверов много. Массовая проверка:


for host in s1 s2 s3; do
ssh "$host" "sshd -T" | sort > "$host.conf"
done

diff -u s1.conf s2.conf


Сортировка помогает убрать разницу порядка строк.

BashTex 📱 #bash #utils
  • 👍 4
More from @bash_tex
  1. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  2. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  3. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  4. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  5. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  6. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →