Bash Days | Linux | DevOps
19.6K subscribers
61 photos
14 videos
328 links
Авторский канал от действующего девопса

Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue
Чат: @bashday

DevOps Интенсив: @tormozilla_bot
Download Telegram
Айти убивает!

Господа и дамы, если сидите за компьютером, не забрасывайте ноги на стол и т.п.

Будущее такое — искривление жопы, защемление нервов, невролог, мягкая подушка в виде ободка унитаза и хуй пойми еще что после мрт. Наверное витамин Б, физкультура и какой-нибудь Бруфен с пластырями-гасителями.

Технический пост будет завтра. Кому по домашкам не ответил, завтра с утра напишу, сорян. День пиздень, я нахуй в шоке, где мои 17 лет на Большом Каретном...

Берегите себя и свои жопы

Ииииии

Самое главное сидите на своей жопе ровно
😲

Даже если упал прод — никогда не стрессуй, прод сам поднимется. Никакие деньги мира тебе не вернут твои нервы.

И даже если только ты можешь всё это гавно починить, не суетесь, покури. Мир подождет пару минут или часов, пока ты думаешь. Ты лучший/ая!

Всех обнял ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Да, 3.14здострадальные посты заходят намного эффективнее, видимо больную тему затронул 😏

Ладно, тут пост еще интересный от Tagd Tagd завалялся, внимание на 1С не обращаем, важен сам концепт. Поехали!

БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ

Сегодня мы рассмотрим как переложить свою работу на чужие плечи, но чтобы ничего не сломалось. Я админю сервера с 1с. И очень часто разработчики просят перезагрузить какой-нибудь сервис или сервер.

Вместо web-админок предлагаю использовать ssh-админки. Я им больше доверяю.

sudo vim /usr/local/bin/servcontrol

#!/bin/bash
trap '' SIGINT SIGTERM SIGHUP DEBUG
declare -i MULTICOLUMN=0
declare -ir CMD_COL=3 #command column
declare -ir DLY_COL=4 #delay column
declare -ir NOCONFIRM_COL=5
declare -i COLS=$(echo "cols"|tput -S)
declare -i NUM=0
declare -u ANS
function ini(){ echo '
# (autonum_1) : name_2 : command_3 : delay_sec_4 : [NO_confirm_5]
Exit menu :exit:0:y
restart_postgres:systemctl postgresql restart:60
restart_1c_1541 :systemctl srv1cv83 restart:60
restart_1c_2541 :systemctl srv1cv83_2 restart:60
REBOOT__SERVER :reboot:10
'|awk '!/^#/ && NF {print ++i ":" $0}'
}
function get_ini_col(){ ini|awk -F: -vn=$1 -vc=$2 '$1==n{print $c;exit}';}
function prn_sleep(){
declare -i I=$1
while [[ $I -gt 0 ]];do
echo -ne "$I\033[0K\r"
sleep .99
I=$I-1
done
}
[[ $MULTICOLUMN -eq 0 ]] && CMDE='cat' || CMDE='column -x -c$COLS'
declare -i MAX=$(ini |awk -F: '{m=$1}END{print m}')
while :;do
clear
ini|awk -F: '{print $1,$2,"delay",$4 }'|eval $CMDE
read -p "select item number = "
#protection
NUM=$(echo $REPLY|sed 's/[^0-9]//g')
if [[ $NUM -le 0 ]] || [[ $NUM -gt $MAX ]];then
continue
fi
CMD=$(get_ini_col $NUM $CMD_COL)
DLY=$(get_ini_col $NUM $DLY_COL)
clear
echo delay "$DLY"
echo "$CMD"
#confirmation
if [[ -n $(get_ini_col $NUM $NOCONFIRM_COL) ]];then
ANS="YES"
else
read -p "Type YES to confirm operation " ANS
fi
if [[ "$ANS" == "YES" ]];then
clear
echo "$CMD"
prn_sleep $DLY
$CMD
exit
else
echo "Operation caneled"
sleep 1
fi
done
#--


Данный скрипт позволяет перезапустить postgres, сервисы 1с на первом или втором комплекте портов или ребутнуть весь сервак. Разбор скрипта делать не буду, если кому-нибудь будет интересно - напишу разбор отдельной статьей.

sudo chmod 755 /usr/local/bin/servcontrol

в файле /etc/ssh/sshd_config
Match User bashdays_tagd
MaxAuthTries 3
MaxSessions 1
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
allowtcpforwarding no
ForceCommand sudo /usr/local/bin/servcontrol
#--

sudo service sshd restart


Ну, и самое главное. Чтобы эта вся фигня заработала, нужно либо запускать скрипт от root, либо разрешить выполнение скрипта под sudo без пароля для этого пользователя/группы.

Добавляем запись в конец файла /etc/sudoers.

Она позволит запускать указанный скрипт пользователю bashdays_tagd с привилегиями root. Следовательно, все команды в скрипте будут работать.

sudo vim /etc/sudoers

bashdays_tagd ALL=(ALL) NOPASSWD: /usr/local/bin/servcontrol


После подключения ssh bashdays_tagd@host.name

Пользователь видит интерактивное меню со списком команд, которые может выбрать. И все! Команда reboot в скрипте выполняется с задержкой в 5 минут.

Это сделано для того, чтобы нельзя было ребутить сервак в быстром цикле. По идее 5 минут должно хватить, чтобы отключить учетку хакнутого/сумашедшего пользователя или отредактировать sshd_config или sudoers.

man sshd_config
man sudoers


tags: #bash #linux

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
Так ребят, курса никакого нет, вы меня вынудили это делать. Я лишь пошёл на встречу, никого не заставляю, дал вам чо хотели. Двоек уже понаставил, моё почтение.

С сентября уже песда, фейс ебать контроль будет и 2x к цене, так что пользуйся пока летней скидкой и моей больной жопой, домашки проверять то еще дело, я зауважал учителей в школах!
Все мы прекрасно знаем, что для переключения пользователя есть su и sudo. Но не все знают про команду runuser.

Эта команда используется в скриптах, системных процессах, крон тасках и в контексте служб которые запускаются с привилегиями рута. А самое главное не требует ввода пароля.

Пример:

runuser -u roman -- id


Ну и важно посмотреть help, чтобы жонглировать ключами. Там тебе и проброс шелла, сохранение/очистка переменных, псевдотерминалы и т.п.

В скриптах предпочтительнее использовать именно runuser чем везде пихать su.

Если у тебя нет привилегий root и нужно выполнить команду от имени другого пользователя, su для этого подходит лучше.

А чем отличается su от sudo (+ это двойное тире) я писал в этом посте.

Такие дела, изучайте…

tags: #linux

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
DevOps со всех сторон: от компетенций и паттернов до формирования инфраструктуры и безопасности.

📍 Офлайн в Перми — в конференц-зале технопарка Morion Digital
🌐 Онлайн на VK Видео
📆 27 августа, 18:00 по местному времени (GMT+5), 16:00 (МСК, GMT+3)

В программе — выступления инженеров билайна об инфраструктуре и работе DevOps на практике. Они расскажут:
какими компетенциями должен обладать DevOps-инженер;
как сформировать инфраструктуру инженерной компании;
нужен ли компании единый пайплайн;
как обеспечить удобство сервисов, избегая «театра безопасности».

❗️Начало митапа — 27 августа в 18:00 по местному времени (Пермь, GMT+5). Офлайн-участников ждем к 17:30. Онлайн-трансляция начнется в 16:00 (МСК, GMT+3).

Регистрация — на сайте.

Реклама. ПАО Вымпелком. ИНН 7713076301
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья мои, реакции на постах с пальцами знатно всех подзаебали, давайте их котиками заменим + срущих добавим, чтобы проявлять своё животное возмущение и недоумение.

Если есть премка в телеге, размутим! жмякай 👇

https://t.me/boost/bashdays

Всем кто жмякнул — вы котики! 😘

Ну а кто не жмякнул, вы тоже котики 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня мы рассмотрим второй способ, как запилить SOCKS через ssh.

Напишем свой крутой шелл с анимацией и ограничениями для пользователей.

Как-то видел анимацию сисек при долгом копировании, но сейчас не нашел. Может кто подскажет... Варианты анимации здесь.

sudo vim /usr/local/bin/socksshell

#!/bin/bash
trap 'echo -e "\\nWaiting session end...";exit' SIGINT SIGTERM SIGHUP SIGQUIT
printf "VPN on. Press CTRL-C for BREAK "
while :;do
for i in '> ' '>>' ' <' '<<';do
printf "\b\b$i"
sleep 3
done
done

sudo chmod 755 /usr/local/bin/socksshell


Скрипт не дает пользователю ничего делать, но своей анимацией поддерживает соединение в рабочем состоянии. Если не нравится shell на скрипте - поищите в сети Sleep Dummy Shell он на си.

В файле /etc/ssh/sshd_config

Match User bashdays_tagd
MaxAuthTries 3
MaxSessions 10
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
allowtcpforwarding yes
ForceCommand /usr/local/bin/socksshell
#--


Опция ForceCommand, фактически, заменяет оболочку для ssh, если захотите заменить оболочку пользователя в глобально системе (не обязательно):

sudo usermod -s /usr/local/bin/socksshell bashdays_tagd
sudo service sshd restart


А на клиенте:

ssh -D 5000 bashdays_tagd@ssh.host.name


После запуска и ввода фразы ключа программа выводит анимацию. Если прервать команду, соединения в браузере не разорвутся, как в первом способе, а программа будет ожидать закрытия браузера!!!

В firefox Настройки -> Настройка сети -> Параметры соединения: Ручная настройка прокси. SOCKS5. 127.0.0.1 порт 5000.

+ галка Отправлять DNS-запросы через прокси при использовании SOCKS5.

или

ssh -D 192.168.1.57:5000 bashdays_tagd@ssh.host.name


Если ваш адрес 192.168.1.57 и вы человек еще более добрый чем я и решили поделиться вашем счастьем со всей своей локалкой.

В настройка firefox нужно будет заменить 127.0.0.1 на 192.168.1.57

Продолжение следует... © by Tagd Tagd

tags: #linux #networks #bash

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
У меня еще осталась пара тем по ssh, но пока отдохните, наберитесь сил... Я тут решил протестировать циклы for и поделиться результатами.

for ((i = 0 ; i < 100 ; i++)); do
echo $i
done


Годный цикл. Главное логичный и понятный.

for i in {1..3}; do
echo $i
done

# или его расширенная версия с шагом

for i in {50..5..-5}; do
echo $i
done


Возможно построение циклов с нарастанием и убыванием. Циклы не допускают подстановки переменных в параметры цикла!!! Чистый башизм. Не рекомендую.

for i in $(seq 1 10); do
echo $i
done


У разработчиков seq странная логика.seq [OPTION]... FIRST INCREMENT LAST. INCREMENT в средине!!! Несмотря на логику рекомендую.

IFS=$'\n'
for i in $(cat /etc/passwd); do
echo $i
done


Годный цикл для построчного чтения файла, но нужно помнить про разделитель IFS.

for i in "./space test/"*; do
echo $i
done


Годный цикл для перебора файлов, обратите внимание путь в кавычках, а звездочка - нет.

for i in 5 9 8 3;do
echo $i
done


Годный цикл с перечислятельством, для не очень больших количеств.

echo 1 2 3|for i in $(</dev/stdin);do
echo $i
done


Если цикл не работает - верните IFS=" "

Тройка упоротых конструкций:

for ((a=0,b=9;a<10;a++,b--));do
echo $a,$b
done

for ((a=1;a<2000;a+=a));do
echo $a
done

for i in $(j=10;while ((j--));do echo $j;done);do
echo $i
done


Последнюю сам придумал. Можно вообще на собесах применять с предложением упростить или объяснить.

Продолжение следует... © by Tagd Tagd

tags: #bash

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
Как собрать все логи в один.

Иногда возникает задача найти что-то в логах ручками, без установки анализаторов логов.

Логов может быть много, некоторые сжатые - некоторые нет. Для работы со сжатыми файлами есть утилиты, начинающиеся на z. zcat, zgrep, zdiff...

ls -/bin/z* в помощь.

Для сборки логов в один я написал простой скрипт. Он выдает в stdout все логи, в порядке создания, сжатые разжимаются.

#!/bin/bash

test -z "$1" && echo "need log file" && exit

declare EXT=gz

for CUR_LOG in $(ls -tr "$1"*);do
PREFIX=z
if [[ "${CUR_LOG##*.}" != "$EXT" ]];then
PREFIX=
fi
${PREFIX}cat ${CUR_LOG}
done


Сохраняем его в файл sumlog.sh делаем файл исполняемым:

chmod +x sumlog.sh



sudo ./sumlog.sh /var/log/apache2/access.log


Лог файл без индексов и архивных расширений.

Поскольку скрипт очень простой, метод написания я выбрал максимально извращенный. :-)

declare EXT=gz - сжатый файл.
ls -tr "$1"* спиcок файлов, отсортированный по времени (-t), в порядке убывания (-r)

Если у файла расширение не gz, то используем утилиту cat, если gz - zcat

А дальше обрабатывать вывод можно как угодно:

sudo ./sumlog.sh /var/log/apache2/access.log|grep ...
sudo ./sumlog.sh /var/log/apache2/access.log|awk ...
sudo ./sumlog.sh /var/log/apache2/access.log|sed ...


UPD: Тут пользователь Кирилл Катаевский (@rosskk) подсказал, как можно упростить:
#!/bin/bash
test -z "$1" && echo "need log file" ||zcat -f $(ls -tr "$1"*)


tags: #bash © by Tagd Tagd

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
Горизонт

Выходные заебись, никто не срёт в голову, все копят таски до понедельника и отдыхают... Потому что работая в найме ты видишь горизонт (пятницу), а дальше ебутся блохи в суматохе!

Но стоит тебе выйти из найма и начать своё дело, выходные дни странным образом «смещаются», ну как смещаются, ты уже не видишь горизонта событий до которого тебе нужно дойти, ты видишь какой-то кусок земли и лопату в руках.

А дальше ты либо копаешь, чтобы найти свой кусок золота и прокормить своё поселение, либо прокрастинируешь (маешься хуйнёй) и просираешь всё под забором.

Всегда было интересно когда учителя в школе говорили — ты закончишь под забором. Ты будешь продавать пирожки на базаре. Под каким блядь нахуй забором? Где ХУЙ написан? А пирожки я люблю, особенно на базаре! WTF???

Эт я к чему, если решил копать — не бросай, даже если каждый первый тебе говорит — что ты дурной пизды ребёнок…

Всё у тебя получится, просто копай дальше и не останавливайся! Получится! Равновесие мира. Балансировка нагрузки.

А кто дохуя пиздит и сеет в тебе сомнения, пусть идут — нахуй!

tags: #рабочиебудни

🔔 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Приглашаем на митап «DevOps – новый подход в разработке» от ПСБ!
🗓 31 августа в 12:00
📍 Онлайн

На митапе обсудим актуальные инструменты, тенденции и перспективы развития DevOps, особенно в условиях импортозамещения. Вы узнаете, как эффективно автоматизировать процессы и внедрять лучшие практики.

Спикеры от ПСБ:
🔸 «Serverless: новый путь в разработке» – Лев Немировский
🔸 «Перенос распределенного монолита из одной CI-системы в другую» – Петр Галонза
🔸 «Почему у нас своё железо» – Александр Татаринцев

Спикеры от партнеров ПСБ (тема будет объявлена позже) выступят с докладами, завершит мероприятие Клуб DevOps, где участники смогут обсудить актуальные вопросы и проблемы.

Зарегистрироваться:
https://cnrlink.com/psbmeetupbashd

Реклама. ПАО "Промсвязьбанк". ИНН 7744000912. erid: LjN8KKkk5
Практика, которая увеличит твою пенсию в 3 раза!

Есть такая практика «Помодоро», в общем это когда ты 25 минут усердно работаешь, потом 5 минут отдыхаешь и так по кругу.

Практика так сказать — ХУЙНЯ ПОЛНАЯ. Но если критикуешь, предлагай!

Оказывается давным-давно я случайно изобрел свою практику, которую в шутку назвал «Тюленинг».

Суть этой практики полная противоположность «Помодоро». То есть ты работаешь 5 минут и 30 минут отдыхаешь, повторяешь до бесконечности.

В чем плюсы «Тюленинга»?

Главная киллер фича — спустя пару часов нихуя не делания тебе становится скучно и возникает желание поработать. Это желание обычно появляется внезапно. Либо не появляется, тогда практикуешь «тюленинг» дальше.

И как только появилось желание, беги за комп и пили таски. Твой KPI будет прокачен на 100500%, мозг раскочегарен на азарте и в жопе будет приятный зуд.

Двухнедельный спринт закроешь буквально за полчаса. Без хуйни!

Думаешь это прикол такой? Неа! Сегодня лично провел эксперимент, практика работает — идеально!

В общей сложности я провалялся часов 8 + 30 минут ушло на работу + три раза пообедал. Завтра обязательно повторю!

Попробуй, тебе понравится!

#рабочиебудни


🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Создаете веб-приложения? На Positive Tech Day в Санкт-Петербурге вы узнаете, как можно обеспечить их безопасность еще на ранних этапах разработки.

Встречаемся 5 сентября на AppSec Track, во время которого эксперты Positive Technologies расскажут, как повысить качество кода, сократив число уязвимостей в нем, и поделятся самыми важными темами из сферы кибербезопасности.

☁️ Какие новые возможности открываются для разработчиков на основе облачных технологий?

🖥 Какие инструменты необходимы для проверки безопасности веб-приложений?

👣 Можно ли обнаружить следы побега из контейнера?

Ответы — на Positive Tech Day. Регистрируйтесь заранее на сайте, количество мест ограничено!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM