🤩 Linux network namespaces: маленькая отдельная сеть внутри одного сервера
В Linux можно создать отдельное сетевое пространство прямо внутри одного хоста. Для этого используются network namespaces. У каждого namespace могут быть свои:
✍️ printf вместо echo: почему в скриптах это иногда принципиально
echo кажется самым простым способом вывести текст в bash:
echo "backup completed"
И для обычных сообщений этого часто достаточно. Проблемы начинаются, когда в строке появляются \n, \t, -n, обратные слеши или данные из переменных. Например:
text="-n test"
echo "$text"
Поведение echo в разных shell и реализациях может отличаться: где-то -n будет воспринят как опция, где-то escape-последовательности будут обработаны иначе.
⭐️ Invoke-Command: удаленное управление Windows без RDP
Если нужно выполнить одну и ту же команду сразу на нескольких windows-серверах, подключаться к каждому по RDP совсем не обязательно. В PowerShell для этого есть Invoke-Command. Командлет работает через PowerShell Remoting на базе WinRM/WS-Management и позволяет выполнять команды или целые скрипты на удаленных машинах.
▪️ Что умеет:
• Выполнять команды сразу на нескольких компьютерах
• Запускать задачи в фоне через `-AsJob`
• Работать с постоянными PowerShell-сессиями
• В PowerShell 6+ подключаться к удалённым системам через SSH
▪️ Например, проверим Windows Update сразу на двух серверах:
🧐 Как запустить отдельную linux-систему внутри работающего сервера
В debian есть небольшая, но полезная утилита debootstrap. Она позволяет развернуть минимальную работающую систему прямо в обычном каталоге уже запущенного linux. На практике это дает довольно интересные возможности. Можно:
• быстро получить чистую debian-среду для тестов
• зайти в нее через chroot
• подготовить rescue-окружение
• запустить SSH и подключаться к этой системе отдельно
• использовать ее для восстановления основной ОС
• работать с дисками основной системы из независимого окружения
▪️ Простой пример. Устанавливаем debootstrap и разворачиваем Debian 12:
Теперь подключаем системные псевдофайловые системы:
mount --bind /dev /mnt/debootstrap/dev
mount --bind /dev/pts /mnt/debootstrap/dev/pts
mount --bind /proc /mnt/debootstrap/proc
mount --bind /sys /mnt/debootstrap/sys
И заходим внутрь:
chroot /mnt/debootstrap
Все - мы уже находимся в отдельной минимальной Debian 12.
▪️ Можно установить нужные инструменты:
passwd
apt update
apt install tmux openssh-server
▪️ При необходимости можно настроить SSH и запустить его внутри chroot. Например, изменить порт:
▪️ А теперь самое интересное. chroot не является полноценной виртуализацией. Новая система использует ядро основной ОС и имеет доступ к тем ресурсам, которые ей предоставили. Поэтому такое окружение можно использовать как своеобразную аварийную систему, запущенную поверх работающего сервера. Например, можно разместить минимальную систему в tmpfs:
mkdir /mnt/rescue
mount -t tmpfs -o size=2G tmpfs /mnt/rescue
Скопировать туда подготовленное окружение, примонтировать /dev, /proc, /sys, выполнить chroot - и получить независимый userspace, который продолжает работать даже при серьезных проблемах с основной системой. Это особенно интересно для VPS и удаленных серверов, где нет нормальной KVM/IPMI-консоли и нельзя просто загрузиться с rescue ISO.
TCP-соединение до указанного порта устанавливается. Если False - дальше уже проверяем firewall, маршрут, NAT и слушает ли сервис порт.
По сути, для обычной проверки доступности TCP это удобная замена telnet. Не нужно отдельно устанавливать Telnet Client и потом выходить из открытого соединения.
3️⃣ Трассировка маршрута
tnc 8.8.8.8 -TraceRoute
Полезно, когда нужно быстро посмотреть путь до узла без отдельного tracert. Есть и подробный режим: