Забавная ситуёвина с ubuntu 24. После того, как человек поменял в файле
По-прежнему слушался порт 22. Хм... Хуйня какая-то.
ㅤ
Всё оказалось прозаичнее. В новых версиях дистрибутива, ssh демон стал использовать сокетовую модель для подключения клиентов. Как раз недавно мы разбирали
Ну так вот. Если подключиться к консоли дистрибутива (не по ssh), то обнаружим, что никакой ssh сервис не запущен. Однако...
Но если выполнить:
Да ёбтвою мать! Разбираемся.
Суть такая. Для ssh используется не
Пиздец конечно конструкция. Если посмотреть файл
Смотрим на
А чё блядь делать?
Снимать штаны и бегать. А если серьезно, то решается это просто. После правки конфига
Перезапускаем именно юнит сокета. После этого порт изменится. А в файле
Красота. Если тебя удручают эти нововведения, то можно вернуться к привычной схеме.
Делается это так:
Способ описан на официальном сайте бубунты.
Вот такие пироги.
🛠 #linux
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
/etc/ssh/sshd_config порт с 22 на 2222 и сделал systemctl restart ssh - ничего не произошло.По-прежнему слушался порт 22. Хм... Хуйня какая-то.
ㅤ
Всё оказалось прозаичнее. В новых версиях дистрибутива, ssh демон стал использовать сокетовую модель для подключения клиентов. Как раз недавно мы разбирали
systemd и его функционал, поищи по тегу #systemdНу так вот. Если подключиться к консоли дистрибутива (не по ssh), то обнаружим, что никакой ssh сервис не запущен. Однако...
Но если выполнить:
ss -tln то увидим:tcp LISTEN 0 4096 *:22 *:*
Да ёбтвою мать! Разбираемся.
Суть такая. Для ssh используется не
ssh.service юнит, а ssh.socket. А как мы знаем юнит socket не держит процесс постоянно запущенным. Экономия ресурсов и т.п. А вот когда кто-то обращается к порту 22, запрос улетает на сокет systemd, который уже и запускает сервис ssh.service..Пиздец конечно конструкция. Если посмотреть файл
ssh.socket, в нём будет:[Unit]
Description=OpenBSD Secure Shell server socket
Before=sockets.target ssh.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Socket]
ListenStream=0.0.0.0:22
ListenStream=[::]:22
BindIPv6Only=ipv6-only
Accept=no
FreeBind=yes
[Install]
WantedBy=sockets.target
RequiredBy=ssh.service
Смотрим на
ListenStream, вот тебе и 22 порт.А чё блядь делать?
Снимать штаны и бегать. А если серьезно, то решается это просто. После правки конфига
/etc/ssh/sshd_config делаем:systemctl daemon-reload
systemctl restart ssh.socket
Перезапускаем именно юнит сокета. После этого порт изменится. А в файле
ssh.socket будет такое:[Socket]
ListenStream=0.0.0.0:2222
ListenStream=[::]:2222
Красота. Если тебя удручают эти нововведения, то можно вернуться к привычной схеме.
Делается это так:
systemctl disable --now ssh.socket
rm -f /etc/systemd/system/ssh.service.d/00-socket.conf
rm -f /etc/systemd/system/ssh.socket.d/addresses.conf
systemctl daemon-reload
systemctl enable --now ssh.service
Способ описан на официальном сайте бубунты.
Вот такие пироги.
Ну а чем отличается ssh_config от sshd_config я описывал в этом посте.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
9 121
Как оказалось многие не знают, как нативным
ㅤ
Все довольно просто и очевидно. Нужно сделать бутерброд.
В
1. Первая строка запускает скрипт в начале минуты (00:00, 00:01, 00:02…)
2. Вторая строка — ждёт 30 секунд и запускает скрипт (00:00:30, 00:01:30, 00:02:30…).
Тут и получаем шаг в 30 секунд, именно через 2 вызова.
Костыльно? Ага! Но порой не хочется ебаться с таймерами и сделать все по-быстрому. Как вариант, вполне годный. Аналогично можно городить и другие интервалы.
Минусы подхода
⚪ Нет гарантии точности. Если первый запуск скрипта будет работать дольше, чем пауза (
⚪ Мусор в crontab. Для мелкого интервала надо плодить много строк.
⚪ Нет гибкой логики.
Где это полезно
⚪ Лёгкие скрипты мониторинга (ping, проверка статуса).
⚪ Хаотизация нагрузки (например,
⚪ Если
А как работать с таймерами ищи по тегу #systemd, много про это писал.
🛠 #linux #cron #systemd
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
cron (без systemd timers) запускать скрипты с интервалом в 30 секунд, без модификации самого скрипта.ㅤ
Все довольно просто и очевидно. Нужно сделать бутерброд.
Cron исторически работает только с минутной точностью. В crontab нельзя написать «каждые 10 секунд» или «раз в 30 секунд». Для этого обычно использую systemd timers или отдельный демонический скрипт с while true; sleep ...
В
crontab строка запускается раз в минуту. Но внутри можно поставить sleep — задержку перед запуском. Таким образом мы получим несколько запусков в рамках одной минуты.* * * * * /usr/local/sbin/bashdays.sh
* * * * * sleep 30; /usr/local/sbin/bashdays.sh
1. Первая строка запускает скрипт в начале минуты (00:00, 00:01, 00:02…)
2. Вторая строка — ждёт 30 секунд и запускает скрипт (00:00:30, 00:01:30, 00:02:30…).
Тут и получаем шаг в 30 секунд, именно через 2 вызова.
Костыльно? Ага! Но порой не хочется ебаться с таймерами и сделать все по-быстрому. Как вариант, вполне годный. Аналогично можно городить и другие интервалы.
Минусы подхода
sleep), запуски могут наложиться.Где это полезно
sleep $((RANDOM % 60)) для рассинхрона).systemd timers или другие планировщики недоступны (например, в ограниченных окружениях или старых системах).А как работать с таймерами ищи по тегу #systemd, много про это писал.
—
Please open Telegram to view this post
VIEW IN TELEGRAM