openssl в командной строке

Проверить сертификат, TLS-рукопожатие или срок истечения — openssl делает это без браузера. # TLS-рукопожатие и цепочка сертификатов openssl s_client -connect example.com:443 -servername example.com </dev/null # информация о сертификате из файла openssl x509 -in cert.pem -noout -text # дата истечения openssl x509 -in cert.pem -noout -dates Проверить, не истекает ли сертификат в течение 30 дней (exit 1 = истекает): openssl x509 -in cert.pem -noout -checkend 2592000 && echo OK || echo "EXPIRES SOON" # проверить удалённо echo | openssl s_client -connect example.com:443 2>/dev/null | \ openssl x509 -noout -enddate # проверка цепочки доверия openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt cert.pem Удобно добавить в cron — заранее узнаёшь об истекающих сертификатах. ...

9 июня 2026 г. · llexa

systemd: пишем свой .service с нуля

Любой скрипт или приложение можно превратить в systemd-сервис за пять минут. # /etc/systemd/system/myapp.service [Unit] Description=My Application After=network.target [Service] Type=simple ExecStart=/usr/local/bin/myapp --config /etc/myapp.conf ExecStop=/bin/kill -TERM $MAINPID Restart=on-failure RestartSec=5 User=myapp [Install] WantedBy=multi-user.target Основные значения Type=: simple — не форкается; forking — демон в фон; oneshot — запуск и выход (cron-стиль). systemctl daemon-reload systemctl enable --now myapp systemctl status myapp journalctl -u myapp -f Restart=on-failure — перезапуск при ненулевом exit-коде. Restart=always — всегда, кроме явного stop. RestartSec — пауза перед перезапуском. ...

9 июня 2026 г. · llexa

tcpdump: захват трафика на сервере

Самый быстрый способ понять, что происходит в сети — tcpdump прямо на сервере. # слушать на всех интерфейсах, без резолва имён tcpdump -i any -n # только HTTP (порт 80) от конкретного хоста tcpdump -i eth0 -n host 192.168.1.10 and port 80 # захватить 100 пакетов и выйти tcpdump -i any -n -c 100 BPF-фильтры: host, net, port, src, dst, логика and/or/not. # всё кроме SSH tcpdump -i any not port 22 # захват в файл для анализа позже tcpdump -i eth0 -w /tmp/capture.pcap # прочитать файл tcpdump -r /tmp/capture.pcap -n Pipe в Wireshark с удалённого сервера: ...

9 июня 2026 г. · llexa

DNS: unbound, dog и DOH/DOT

DNS можно резолвить быстрее, приватнее и с нормальным выводом. # установить unbound apt install unbound systemctl enable --now unbound # проверить резолвинг dig @127.0.0.1 example.com dog — современная замена dig с цветным выводом: apt install dog dog example.com dog example.com MX dog @8.8.8.8 example.com AAAA DOT (DNS over TLS) и DOH (DNS over HTTPS) шифруют запросы. В unbound включить DOT: forward-zone: name: "." forward-tls-upstream: yes forward-addr: 1.1.1.1@853 forward-addr: 9.9.9.9@853 После systemctl restart unbound — трафик на 53 снаружи не виден. Проверить: dog @127.0.0.1 example.com должен отвечать с кешем. ...

8 июня 2026 г. · llexa

Proxmox: HA cluster без потери VM

Если узел падает — VM автоматически поднимается на соседнем. # на первом узле pvecm create mycluster # на втором и третьем pvecm add 192.168.1.10 # проверить кворум pvecm status Минимум три узла: при двух кворум не набрать после отказа одного. Fencing настраивается через IPMI/iLO — без него кластер не запустит миграцию (split-brain). Добавить VM в HA: ha-manager add vm:101 ha-manager set vm:101 --state started ha-manager status ha-manager сам решает, куда переселить VM. Принудительная миграция: qm migrate 101 pve2 --online. ...

8 июня 2026 г. · llexa

sed и awk: однострочники на каждый день

Не скрипты — команды, которые уже сейчас в истории bash. # заменить во всех .conf sed -i 's/old/new/g' /etc/nginx/*.conf # удалить пустые строки sed '/^$/d' file.txt # вывести IP из access.log awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head # извлечь поле по разделителю awk -F: '{print $1}' /etc/passwd # сумма столбца awk '{sum += $5} END {print sum}' report.txt sed -i меняет файл на месте — сделай бэкап или сначала проверь без -i. awk -F задаёт разделитель; END — блок после всех строк. Для сложных замен с группами: sed 's/\(foo\)\(bar\)/\2\1/'. ...

8 июня 2026 г. · llexa

Цикл дежурного sysadmin'а

Воспроизводится каждую пятницу в 23:47. ┌─────────────────────────────────┐ ↓ │ Тихо │ ↓ │ Алерт в 23:47 │ ↓ │ SSH. Паника. Логи. │ ↓ │ Само починилось │ ↓ │ «Надо задокументировать» │ ↓ │ Никто не задокументировал ────────┘ Причина неизвестна. Мониторинг молчит. До следующей пятницы. #linux #sysadmin #юмор #bash #devops

7 июня 2026 г. · llexa

ip: замена ifconfig и route

ip из пакета iproute2 — актуальная замена ifconfig, route, arp. Работает через netlink, а не /proc. # адреса интерфейсов ip addr show ip addr show eth0 # маршруты ip route show ip route get 8.8.8.8 # какой маршрут до адреса # управление интерфейсами ip link show ip link set eth0 up ip link set eth0 down # таблица ARP/NDP-соседей ip neigh show Добавить временный адрес и маршрут (до перезагрузки): ...

6 июня 2026 г. · llexa

strace и ltrace: отладка без исходников

strace перехватывает системные вызовы процесса. Помогает понять, что программа делает, когда документации нет или она врёт. # запустить и трассировать strace ls /tmp # подключиться к работающему процессу strace -p 1234 # только вызовы открытия файлов strace -e trace=openat,open ls /tmp # только сетевые вызовы strace -e trace=network curl example.com # сохранить вывод в файл strace -o /tmp/out.txt -p 1234 ltrace — то же самое, но на уровне вызовов разделяемых библиотек: ...

6 июня 2026 г. · llexa

Афоризмы Мёрфи #3: Первое следствие

«Ничто никогда не делается так просто, как кажется.» Первое следствие Мёрфи — Артур Блох, «Законы Мёрфи», 1977. Любая задача по мере выполнения обнаруживает скрытые зависимости, крайние случаи и нюансы, которых не было на этапе планирования. В системном администрировании это обычно называют «а я думал, что это займёт пять минут». #murphy #афоризмы #юмор #sysadmin

6 июня 2026 г. · llexa