Например,
SRE фокусируется на надёжности и эксплуатации систем, а Platform Engineering — на создании общей платформы и инструментов для продуктовых команд.На картинке — наглядное сравнение
DevOps, SRE и Platform Engineering: от разработки, тестирования и релизов до деплоя, мониторинга и эксплуатации инфраструктуры.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6🤝4❤1
Подключаемся к закрытым серверам через SSH ProxyJump!
В инфраструктуре серверы часто не имеют публичного IP-адреса и доступны только из внутренней сети. При этом отдельный сервер может быть доступен извне и использоваться как промежуточный SSH-узел — bastion или jump host.
Например, bastion доступен по адресу
Если bastion имеет доступ к
(адреса в примерах документационные — при повторении замените их на свои)
SSH сначала подключится к
Если SSH на bastion работает на нестандартном порту, его можно указать прямо в параметре
Для постоянной работы удобнее описать оба сервера в
После этого подключение к внутреннему серверу выполняется обычной командой:
Через тот же маршрут можно использовать
Или
Если до целевого сервера нужно пройти через несколько промежуточных узлов, их можно перечислить через запятую:
То же самое можно записать в конфигурации:
Для bastion и внутреннего сервера можно использовать разные SSH-ключи:
Приватный ключ от внутреннего сервера при этом не требуется копировать на bastion. Аутентификацию на конечном сервере выполняет локальный SSH-клиент.
Посмотреть итоговую конфигурацию, которую SSH применит для подключения, можно через:
Например, отдельно вывести основные параметры:
Если соединение не устанавливается, запускаем SSH с диагностическим выводом:
Для более подробной диагностики:
Так можно увидеть установление соединения через промежуточный узел, выбор ключей, проверку host key и этапы аутентификации.
После этого локально подключаемся к базе через порт
SSH-соединение пройдёт через bastion до внутреннего сервера, а перенаправление на
🔥
🚪 Linux Ready | #практика
В инфраструктуре серверы часто не имеют публичного IP-адреса и доступны только из внутренней сети. При этом отдельный сервер может быть доступен извне и использоваться как промежуточный SSH-узел — bastion или jump host.
Например, bastion доступен по адресу
203.0.113.10, а внутренний сервер имеет адрес 10.0.0.20. Напрямую подключиться к внутреннему серверу из внешней сети нельзя:ssh admin@10.0.0.20
Если bastion имеет доступ к
10.0.0.20:22, используем ProxyJump:ssh -J user@203.0.113.10 admin@10.0.0.20
(адреса в примерах документационные — при повторении замените их на свои)
SSH сначала подключится к
203.0.113.10, а соединение с SSH-сервером на 10.0.0.20 будет установлено через этот промежуточный узел.Если SSH на bastion работает на нестандартном порту, его можно указать прямо в параметре
-J:ssh -J user@203.0.113.10:2222 admin@10.0.0.20
Для постоянной работы удобнее описать оба сервера в
~/.ssh/config:Host bastion
HostName 203.0.113.10
User user
Host internal
HostName 10.0.0.20
User admin
ProxyJump bastion
После этого подключение к внутреннему серверу выполняется обычной командой:
ssh internal
Через тот же маршрут можно использовать
scp:scp backup.tar.gz internal:/tmp/
Или
sftp:sftp internal
Если до целевого сервера нужно пройти через несколько промежуточных узлов, их можно перечислить через запятую:
ssh -J user@gateway1,user@gateway2 admin@internal
То же самое можно записать в конфигурации:
Host internal
HostName 10.0.0.20
User admin
ProxyJump gateway1,gateway2
Для bastion и внутреннего сервера можно использовать разные SSH-ключи:
Host bastion
HostName 203.0.113.10
User jump
IdentityFile ~/.ssh/bastion_ed25519
Host internal
HostName 10.0.0.20
User admin
IdentityFile ~/.ssh/internal_ed25519
ProxyJump bastion
Приватный ключ от внутреннего сервера при этом не требуется копировать на bastion. Аутентификацию на конечном сервере выполняет локальный SSH-клиент.
Посмотреть итоговую конфигурацию, которую SSH применит для подключения, можно через:
ssh -G internal
Например, отдельно вывести основные параметры:
ssh -G internal | grep -Ei 'hostname|user|proxyjump|identityfile'
Если соединение не устанавливается, запускаем SSH с диагностическим выводом:
ssh -v internal
Для более подробной диагностики:
ssh -vvv internal
Так можно увидеть установление соединения через промежуточный узел, выбор ключей, проверку host key и этапы аутентификации.
ProxyJump можно использовать вместе с обычным port forwarding. Например, PostgreSQL работает на внутреннем сервере и слушает только локальный порт 5432:ssh -N -J user@203.0.113.10 \
-L 5433:127.0.0.1:5432 \
admin@10.0.0.20
После этого локально подключаемся к базе через порт
5433:psql -h 127.0.0.1 -p 5433 database
SSH-соединение пройдёт через bastion до внутреннего сервера, а перенаправление на
127.0.0.1:5432 будет выполнено уже со стороны конечного SSH-сервера.ProxyJump позволяет подключаться к серверам во внутренних сетях через bastion без ручного создания промежуточных SSH-сессий. Настройку можно вынести в ~/.ssh/config и использовать тот же маршрут для ssh, scp, sftp и SSH-туннелей.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍10❤9
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь есть не только команды терминала с примерами, но и теория о процессах, памяти, правах, файловой системе и сети, а также темы вроде LVM, RAID, systemd, безопасности и контейнеров. Отдельный плюс — практика, задачи с решениями, диагностика типичных проблем и вопросы для подготовки к собеседованиям.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍12🔥5
Прокидываем TCP-порты через socat!
Бывает требуется опубликовать локальный TCP-сервис на другом порту или адресе, не изменяя конфигурацию приложения и не разворачивая отдельный reverse proxy. Для этого в линукс удобно использовать
Установим
Предположим, приложение принимает соединения только на loopback-адресе:
Проверим listener через
Для сервиса, привязанного к IPv4 loopback, вывод может выглядеть так:
Чтобы временно опубликовать сервис через порт
Проверим новый listener:
Если входящие соединения на
Адреса из документационных диапазонов в примерах необходимо заменить реальными адресами своей инфраструктуры. Параметр
Если публиковать порт на всех локальных IPv4-адресах не требуется, listener можно привязать к конкретному адресу:
В этом случае соединения принимаются только на
Для локального клиента это обычное соединение с
Ещё один полезный сценарий — публикация Unix domain socket через локальный TCP-порт. Предположим, приложение использует следующий сокет:
Свяжем его с
Если приложение обслуживает HTTP, проверить соединение можно через
Работает и обратное направление: Unix-сокет может передавать соединения в TCP:
Для диагностики достаточно добавить
Для постоянного проксирования предпочтительнее использовать штатную конфигурацию сервиса, reverse proxy, NAT или отдельный
🔥
🚪 Linux Ready | #практика
Бывает требуется опубликовать локальный TCP-сервис на другом порту или адресе, не изменяя конфигурацию приложения и не разворачивая отдельный reverse proxy. Для этого в линукс удобно использовать
socat — универсальный инструмент для двунаправленной передачи данных между сокетами.Установим
socat в Debian или Ubuntu:sudo apt update && sudo apt install socat -y
Предположим, приложение принимает соединения только на loopback-адресе:
127.0.0.1:8080
Проверим listener через
ss:ss -tlnp | grep ':8080'
Для сервиса, привязанного к IPv4 loopback, вывод может выглядеть так:
LISTEN 0 128 127.0.0.1:8080 0.0.0.0:*
Чтобы временно опубликовать сервис через порт
9000, запускаем дополнительный listener:socat TCP-LISTEN:9000,reuseaddr,fork \
TCP:127.0.0.1:8080
socat принимает соединения на 9000/tcp и для каждого из них устанавливает TCP-соединение с 127.0.0.1:8080. Без bind IPv4-listener обычно привязывается к 0.0.0.0, поэтому порт становится доступен на IPv4-адресах хоста с учётом firewall и других сетевых ограничений.Проверим новый listener:
ss -tlnp | grep ':9000'
Если входящие соединения на
9000/tcp разрешены, сервис можно проверить через адрес сервера:curl http://203.0.113.10:9000
Адреса из документационных диапазонов в примерах необходимо заменить реальными адресами своей инфраструктуры. Параметр
fork создаёт дочерний процесс для каждого принятого соединения, а reuseaddr включает SO_REUSEADDR и упрощает повторную привязку адреса после перезапуска.Если публиковать порт на всех локальных IPv4-адресах не требуется, listener можно привязать к конкретному адресу:
socat TCP-LISTEN:9000,bind=192.0.2.10,reuseaddr,fork \
TCP:127.0.0.1:8080
В этом случае соединения принимаются только на
192.0.2.10. Параметр bind выполняет привязку к IP-адресу, а не непосредственно к сетевому интерфейсу.socat также может проксировать TCP-соединения на другой сервер. Например, локальный 5433/tcp можно направить на PostgreSQL внутри другой сети:socat TCP-LISTEN:5433,bind=127.0.0.1,reuseaddr,fork \
TCP:10.0.0.20:5432
Для локального клиента это обычное соединение с
127.0.0.1:5433, тогда как socat передаёт байтовый поток на 10.0.0.20:5432:psql -h 127.0.0.1 -p 5433 database
Ещё один полезный сценарий — публикация Unix domain socket через локальный TCP-порт. Предположим, приложение использует следующий сокет:
/run/myapp/app.sock
Свяжем его с
127.0.0.1:8080:socat TCP-LISTEN:8080,bind=127.0.0.1,reuseaddr,fork \
UNIX-CONNECT:/run/myapp/app.sock
Если приложение обслуживает HTTP, проверить соединение можно через
curl:curl http://127.0.0.1:8080
Работает и обратное направление: Unix-сокет может передавать соединения в TCP:
socat UNIX-LISTEN:/tmp/backend.sock,fork \
TCP:127.0.0.1:8080
Для диагностики достаточно добавить
-d -d, чтобы socat выводил информацию о создаваемых соединениях:socat -d -d \
TCP-LISTEN:9000,reuseaddr,fork \
TCP:127.0.0.1:8080
Для постоянного проксирования предпочтительнее использовать штатную конфигурацию сервиса, reverse proxy, NAT или отдельный
systemd-unit. socat полезен для диагностики, временной публикации сервисов и связывания TCP с Unix domain sockets без изменения конфигурации приложений.socat позволяет одной командой организовать простой транспортный прокси между TCP-портами, удалёнными адресами и Unix-сокетами — хороший инструмент для диагностики и тестирования сетевого взаимодействия.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥12❤4🤝2
Например,
${VAR:-default} использует значение по умолчанию, если переменная не задана, а ${VAR##pattern} и ${VAR%%pattern} позволяют удалять части строк прямо средствами Bash без дополнительных команд.На картинке — основные возможности Bash Parameter Expansion: установка значений по умолчанию, удаление префиксов и суффиксов, поиск и замена строк, извлечение подстрок, получение длины переменной и др.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍11❤3🤝3
При переносе резервных копий, архивов и образов дисков важно не только завершить передачу, но и убедиться, что полученный файл полностью совпадает с исходным. Связка rsync и SHA-256 позволяет возобновлять прерванное копирование и проверять данные перед дальнейшим использованием.
В этом посте:
• Создаём контрольную сумму исходного файла через sha256sum;
• Передаём большие файлы по SSH с возможностью продолжить прерванное копирование;
• Проверяем целостность полученных данных по SHA-256;
• Настраиваем проверку перед дальнейшей обработкой и используем rsync --dry-run.
Проверка контрольной суммы позволяет обнаружить изменения содержимого, которые нельзя выявить простым сравнением размеров файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤9👍7🤝1