Bash Days | Linux | DevOps
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru
Mostrar más📈 Análisis del canal de Telegram Bash Days | Linux | DevOps
El canal Bash Days | Linux | DevOps (@bashdays) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 23 794 suscriptores, ocupando la posición 5 701 en la categoría Tecnologías y Aplicaciones y el puesto 28 128 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 23 794 suscriptores.
Según los últimos datos del 17 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -202, y en las últimas 24 horas de -5, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 21.91%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 12.48% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 5 213 visualizaciones. En el primer día suele acumular 2 971 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 21.
- Intereses temáticos: El contenido se centra en temas clave como bashdays, linux, bash, docker, скрипт.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Авторский блог от действующего девопса
Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.
Автор: Роман Шубин
Реклама: @maxgrue
MAX: https://max.ru/bashdays
Курс: @tormozilla_bot
Блог: https://bashdays.r...”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 18 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
pfsense. Да, без картинок воспринимается не очень, но это лучше, чем ничего.
—
Добавляем сетевые интерфейсы. Хорошо, если у вас есть несколько линий от разных провайдеров. Если нет - не беда.
pfsense позволяет работать с usb модемами, и подключениями типа pptp, pppoe и другими. Сейчас практически любой домашний роутер может работать как pptp сервер.
Но я не буду останавливаться на вопросе, как создать интерфейсы, как настроить pptp. Информации об это море. И да, здесь не поднимаем тему безопасности - задача сменить IP.
—
Добавляем Новые интерфейсы (типа PPP, или что там у вас есть)
—
Создаем алиасы с группой хостов, которые должны выходить через ip, отличающийся от шлюза по умолчанию. Таких может быть несколько. Например, IP_GATE1 IP_GATE2 IP_GATE3, по одному на каждый шлюз.
—
Система\Маршрутизация\Шлюзы добавляем шлюзы и в свойствах снимаем галки Мониторинг Шлюзов и Действие Шлюза. Если так не сделать - в случае "отваливания шлюза" умная система перенаправит трафик через шлюз по умолчанию, и на другом конце "засветится" ip шлюза по-умолчанию.
—
Межсетевой экран\Правила\LAN Для каждой группы создаем два правила:
- Разрешить IPv4 протокол любой Источник IP_GATE1, и в расширенных опциях указываем нужный шлюз (GATE1) (слева на правиле в общем списке правил появится шестеренка)
- Ниже: Блокировать IPv4 протокол любой Источник IP_GATE1.
—
Для остальных - аналогично. Теперь Группа IP_GATE1 будет выходить через GATE1 или вообще не будет выходить в случае отсутствия инета на GATE1.
Применять исключительно для причинения добра!
tags: #networks © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgateМосква - ru-7b
Натыкиваешь параметры:
1. CPU: 1
2. RAM: 512 Mb
3. HDD Базовый: 10 Gb
4. Сеть NAT
И самое главное тыкни галку: Прерываемый сервер
Опция «Прерываемый сервер» есть только в регионе Москва - ru-7b
Эта конфигурация обойдется тебе в 266 рубля. С параметрами 2x2x20 будет соответственно в 2 раза дороже.
Но сразу берем во внимание, что это прерываемый сервер и обычно работает 24 часа, потом отключается со статусом Expired.
Что интересно такой сервер можно включать и дальше пользоваться если в регионе есть свободные ресурсы.
Если тебе понадобится белый айпишник, придется раскошелится еще на 178 рублей. Но ты в праве запихать туда wireguard или openvpn и ходить по внутренним айпишникам.
Если в конфигурации сервера ты не выбирал Локальный диск, а сделал сетевой — то после удаления сервера, с сетевого диска можно будет без труда его восстановить. Просто раскатываем новый «прерываемый сервер» и подключить этот сетевой диск как загрузочный.
За 3 недели тестирования у меня эти сервера ни разу не удалились, я просто их включаю заново и провожу эксперименты с Терраформом, Ансиблом, гоняю тесты пайплайнов гитлаба и т.п.
Короче такие сервера отлично подходят чтобы быстро что-то проверить. Продакшен естественно на них тащить не нужно, однажды проебешь всё разом.
Еще момент — выключенный сервер, либо в статусе Expired потребляет ресурсы, поэтому тарифицируется. Если сервер тебе не нужен, просто удали его (не забудь про ip и сетевые диски) и потом заново подними терраформом. Если у тебя нет ресурсов, твой баланс выжираться не будет.
Ну а кому вся эта хуйня чужда и ты привык к обычным VPS, у Селектела есть ЭТО. В нём гораздо меньше опций, нет обвесов, нет терраформа и т.п. но все же это тот же Селектел 🦖, ну и цены тут гораздо демократичнее:
CPU: 1 / RAM: 512 / SDD: 20 = 200 рублейВ общем на потыкать тот же терраформ в боевых условиях рекомендую первый вариант с прерываемыми серверами. Не реклама, чисто личные наблюдения. Пользуйся. tags: #рабочиебудни — 🔔 @bashdays➡️ @gitgate
Если функции, вынесены в файл, подключенный через source, bash каждый раз его будет открывать/перечитывать при обращении к функции? Или как-то считает в память и все?Давай посмотрим что происходит в кишках в это время. Давненько мы с тобой в
strace не смотрели.
ㅤ
Предположим есть bash скрипт с функциями:
functions.sh
#!/bin/bash
bashdays_function() {
echo "Hello from BashDays"
}
И основной скрипт, который сорсит файл с функциями:
test_script.sh
#!/bin/bash
source ./functions.sh
bashdays_function
bashdays_function
Не забываем сделать: chmod +x test_script.sh
Запускаем test_script.sh под контролем strace:
strace -e trace=openat ./test_script.sh
И видим:
openat(AT_FDCWD, "./test_script.sh", O_RDONLY) = 3
openat(AT_FDCWD, "./functions.sh", O_RDONLY) = 3
Hello from BashDays
Hello from BashDays
То есть в контексте скрипта test_script.sh, файл с функциями был прочитан один раз.
При втором вызове функции всё считалось из памяти.
Если бы файл functions.sh читался каждый раз, то мы увидели бы несколько строчек openat(AT_FDCWD).
Грубо говоря при каждом запуске test_script.sh, подключенный файл через source будет прочитан один раз.
Вроде очевидно, но порой заставляет задуматься.
Изучай!
tags: #bash #debug #linux
—
🔔 @bashdays➡️ @gitgatev=spf1 ip4:178.154.239.164/32 ip4:77.222.53.78/32 ......
Согласно RFC 7208, длина SPF-записи (Sender Policy Framework) не должна превышать 255 символов в одной строке. Однако, если SPF-запись превышает 255 символов, ее можно разбивать на несколько строк, но общая длина записи не должна превышать 512 символов при передаче в DNS.Хотя по некоторым данным допускается 450 символов. А у меня блядь превышает… 1039! Попёрся я обратно в SPF Surveyor смотреть. И в самом низу увидел секцию
v=spf1 ip4:32.190.247.0/24 ip4:65.233.160.0/19 ip4:64.102.0.0/20 ip4:75.14.192.0/18 ip4:78.125.0.0/16 ip4:103.177.8.0/21 ip4:174.194.0.0/16 ip4:206.85.128.0/17 ip4:213.58.192.0/19 ip4:171.217.0.0/19 ip4:171.217.32.0/20 ip4:171.217.128.0/19 ip4:44.92.0.0/15 ip4:48.107.0.0/16 ip4:81.220.186.0/24 ip4:168.154.239.164/32 ~allСкармливаю сначала в валидатор, а потом уже добавляю в TXT. Хуяк! И оно работает! Теперь по DNS lookups needed to validate the record получаем - 0/10. То есть теперь мы вообще не делаем никакие DNS запросы, а чисто сидим на CIDR. За сутки на почту
dmarc@ почти перестали приходить письма с варнингами, да и саппорт пока молчит, почта ходит.
Хер знает на сколько это верное решение, но с виду работает. Я конечно еще понаблюдаю за этим безумием. Придумают какую-то херню, а ты потом ебись с ней.
Если всё накроется пиздой, я обязательно тебе про это сообщу ))
Всего тебе наилучшего!
tags: #рабочиебудни
—
🔔 @bashdays➡️ @gitgateTOTP (Time-based One-Time Password) — это алгоритм, используемый для генерации одноразовых паролей (OTP), которые действуют в течение ограниченного времени.Короче в мою зону комфорта беспощадно насрали. Каждое случившиеся гавно это повод изобрести
zbar, она позволит из терминала распознать qr код, этот код выдают сервисы где включается 2FA.
Не парься, иксы не нужны, всё работает нативно в терминале.
sudo apt install zbar-tools
Далее пиздуем например в gitlab и включаем 2FA, в ответ оно тебе выплюнет QR код. Делаем скриншот QR и сохраняем.
Запускаем сканер:
zbarimg gitlab_qr.png
В ответ получаем нечто подобное:
QR-Code:otpauth://totp/gitlab.com:gitlab.com_hello%40devopsina.ru?secret=1234567890ABCDEFG&issuer=gitlab.com
scanned 1 barcode symbols from 1 images in 0.02 seconds
Замечательно. Из этой кишки нам нужен только secret=1234567890ABCDEFG.
Устанавливаем вторую утилиту:
sudo apt install oathtool
Накидываем bash скрипт:
#!/bin/bash
SECRET="1234567890ABCDEFG"
echo "Gitlab 2FA code: $(oathtool --totp -b "$SECRET")"
Запускаем и получаем желаемый OTP код, вводим его в Gitlab и охуеваем. Мы успешно прошли 2FA. Всё работает!
Базу расковыряли. Теперь нужно какое-то человеческое решение. Накидываем еще один bash скрипт:
#!/bin/bash
secrets=(
"GitLab:1234567890ABCDEFG"
"Google:1234567890ABCDEFG"
"Bashdays:1234567890ABCDEFG"
)
for i in "${!secrets[@]}"; do
IFS=":" read -r service secret <<< "${secrets[i]}"
echo "$((i + 1)). $service"
done
read -p "Введите номер сервиса: " choice
if [[ "$choice" -gt 0 && "$choice" -le "${#secrets[@]}" ]]; then
IFS=":" read -r selected_service selected_secret <<< "${secrets[choice - 1]}"
TOTPCODE=$(oathtool --totp -b "$selected_secret")
echo "TOTP код для $selected_service: $TOTPCODE"
else
echo "Неверный выбор."
fi
read -p ""
Не забываем заполнить массив секретами и названиями сервисов. Если хочется, можешь реализовать чтение secrets из текстового файла. Скрипт закинуть в гит, а данные по секретам хранить у себя или в варсах гитлаба.
Что-то вроде:
secrets_file="secrets.txt"
while IFS= read -r line; do
secrets+=("$line")
done < "$secrets_file"
Сохраняем получившийся скрипт в qr.sh, делаем алиас если нужно и запускаем. В ответ получаем нумерованный список сервисов:
1. Gitlab
2. Google
3. Bashdays
Введите номер сервиса:
Вводим нужный номер сервиса и получаем актуальный OTP код.
Всю эту хуйню можно легко запилить в телеграм бота и генерить OTP коды прям в там не отходя от кассы. А также сделать автоматическую распознавалку QR с добавлением новых сервисов в список.
Например, кидаешь боту QR картинку, он ее распознает, добавляет в sqlite базу этот сервис и генерит по запросу коды.
В общем тут уже полет фантазии, можно и кнопочки прикрутить и другие украшения. Было бы время и желание.
Мне пока достаточно баш скрипта, а ты можешь из этого сделать пет проект и хвастаться им на собесах. Однозначно будет плюсиком.
Вот такой хуйнёй переодически приходится заниматься.
Ладно, чо. Хорошего тебе дня, увидимся!
tags: #linux #bash #рабочиебудни
—
🔔 @bashdays➡️ @gitgatedocker, запустил на нем контейнер, пробросил порты, збс! Только вот есть одно НО. Проброшенные порты торчат жопой наружу и любой желающий может получить к ним доступ.
ㅤ
Хуйня! У меня например на хостовой машине стоит nginx, который прокси-пасит по урлам на нужные приложения, например:
curl https://bashdays.ru/vault/
И оно проксирует на localhost:8002, на этом порту крутится контейнер с vault hashicorp.
Но если сделать так:
curl XXX.XXX.XXX.XXX:8002
Ты сразу попадешь в контейнер, минуя nginx и все его правила. Гавно!
Напрашивается iptables, но в связке с docker это то еще приключение.
Про эти моменты писал в этом и этом посте.Есть решение гораздо изящнее. Рассмотрим пример с gitea. Это урезанный
docker-compose.yml
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
networks:
- gitea
volumes:
- gitea:/data
ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:2221:22"
Смотрим секцию с портами и видим там биндинг на 127.0.0.1. Вот это оно и есть. То есть ты и порты пробрасываешь на хостовую машину и наружу ими не светишь.
Nginx на хостовой машине отлично сходит на 127.0.0.1:3000, но вот если снова выполнить:
curl XXX.XXX.XXX.XXX:3000
То тебе покажут письку! 😑
Вроде элементарно, но как оказалось дохуя специалистов этого не знают и продолжают трахаться с iptables.
И да, оказывается многие (в основном деды) не знают что docker-compose (тот что бинарник) это легаси и файлики docker-compose.yml теперь можно запускать так:
docker compose up -d
А вообще если у тебя всё в контейнерах крутится, выкинь nginx и замени на traefik и никакие порты по умолчанию жопой наружу торчать не будут + автоматическое получение SSL для доменов.
Пользуйтесь!
tags: #devops #docker #security
—
🔔 @bashdays➡️ @gitgatescp, поскольку кроме копирования позволяет управлять правами доступа.
ㅤ
По сравнению с ftp - возможность работы через один порт (легко пробрасывается) Протокол защищенный.
Из минусов - может создавать нагрузку на проц. В openssh включен из коробки. Поэтому если есть доступ по ssh - как правило, есть доступ и по sftp.
А вот обратное - не всегда верно. Иногда бывает нужно разрешить пользователям доступ по sftp, например, чтобы заливать архивы, но совсем не хочется давать возможность шариться по серваку и смотреть, что там крутится.
Вот, для этого есть решение — mysecureshell.
Для debian можно поставить:
sudo apt install mysecureshell
После этого у вас появляется свой собственный sftp сервер с возможностью управления пользователями, группами, управление скоростью закачки и отдачи, можно просматривать текущие сессии и прибивать ненужные.
Возможностью ограничить пользователя только своим каталогом. И еще работа с виртуальными серверами. Рекомендую.
Достаточно пользователю прописать в качестве оболочки mysecureshell - и он человек, ограниченный файловой подсистемой. Кстати, список доступных оболочек можно глянуть так:
cat /etc/shells
А изменить, например так:
sudo usermod -s /usr/bin/mysecureshell username
Конфигурируется данное чудо путем редактирования файла /etc/ssh/sftp_config
Кстати, отлично сочетается с sshfs (монтирование через ssh (по факту через sftp)).
А вот с rsync, говорят не дружит, но я лично не проверял. Приводить примеры конфигурирования не стал, потому что там все очень понятно и прозрачно. Документация приличная, сам конфиг очень классно комментирован.
Репа Mysecureshell
Документация
tags: #linux #utilites © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
