TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #537 15.7K
Да, 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
More from @bashdays
  1. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  2. Sep 24, 2026Post #1565
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  5. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  6. Sep 11, 2026🤖 DevOps в эпоху AI трансформации: что работает уже сейчас! 17 сентября Сбер собирает Dev…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →