Скрипт удаленного администрирования Linux по SSH: SSSC ( Ssh Send Script Command )
Версия stable: 20240605_01 (В соседней ветке тестовые beta версии)
GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Описание
Скрипт предназначен для удаленного администрирования Linux-систем по SSH. Он разрабатывается и тестируется в первую очередь для личного использования на Astra Linux, но тестируется по возможности и на других системах. Список протестированных систем (версия скрипта 20240605_01):
1. Astra Linux 1.7.5
2. Astra Linux 1.8.0.14
3. Альт Рабочая Станция K 10.3 (Необходимо поставить нужные для работы пакеты вручную, т.к. пакет openssh-client имеет другое название)
4. RedOS 8 (Необходимо поставить нужные для работы пакеты вручную, т.к. пакет openssh-client имеет другое название)
На других системах работа не гарантируется и может потребовать доработок. Доработки будут по мере необходимости и возможности. По любым вопросам и проблемам со скриптом обращайтесь в личные сообщения Вконтакте.
Требования для работы скрипта и описание возможностей
- При запуске скрипт проверяет наличие необходимых файлов для работы. Если не найден файл необходимый для работы скрипта, то будет сообщение об ошибке, а в случае с исполняемыми файлами предлагается проверить и установить необходимые пакеты.
- Проверяемые исполняемые файлы:
nmap
,sshpass
,gpg2
,awk
,sed
,grep
,tmux
илиscreen
,zenity
,ssh
,scp
илиrsync
,ls
,cut
,rev
,cat
- Проверяемые пакеты в случае установки:
nmap sshpass gnupg2 gawk sed grep tmux screen zenity openssh-client rsync
- Проверяемые файлы скрипта:
func.sh
,temprunscript_cron
,runcommand
,sssc.conf
,screenrc.conf
-
Добавьте файлы с хостами в каталог
./conf/fileshosts
для использования мультирассылки и отправки через запуск с параметрами. Каталог сканируется при выборе отправки на все компьютеры и предлагает выбрать один из найденных файлов (в случае запуска с параметрами происходит поиск введенного имени файла в каталоге fileshosts). В каждой строке файла должна быть одна запись. Для сканирования доступных ПК в сети используется программа nmap, поэтому синтаксис добавления такой же, как у nmap. Строки можно комментировать с помощью символа#
. Например:localhost #10.0.50.1-255 10.0.51.1/24
-
Заполнить файл конфигурации
sssc.conf
. В файлеsssc.conf
может быть несколько преднастроенных секций, между которыми можно переключаться. Пример настроек с описанием:usesection=tests1 [tests1] sutype=sudo typeterminalmultiplexer=tmux typesendfiles=rsync skipchangescriptfile=0 loginname=test1 multisend=1 sshConnectTimeout=5 numportssh=22 sshtypecon=key sshkeyfile=/home/test1/sshkey/test1ssh gpgfilepass=conf/test.gpg gpgpass=12345 remotedirrunscript=/home/test1/.rstmp remotedirgroup=astra-admin listIgnoreInaccurate=test1;10.0.51; listIgnoreAccurate=10.0.50.1;test2.dc.local;
Комментарии к параметрам файла
sssc.conf
:
sutype
: Тип повышения прав (на текущий момент доступен толькоsudo
). Если не заполнено, будет выбор при запуске скрипта.typeterminalmultiplexer
: Тип многооконного терминала при многопоточной рассылке без параметров (screen
илиtmux
. Рекомендуетсяtmux
).typesendfiles
: Тип отправки файлов (scp
илиrsync
. Рекомендуетсяrsync
, но он должен быть установлен на принимающем ПК.scp
устанавливается сssh
).usesection
: В usesection задается имя используемой секции настроек. usesection должен находится строго в первой строке файла sssc.conf. Если переменная не задана, то при запуске скрипта будет выдан список секций для выбора.skipchangescriptfile
: Пропуск запроса на внесение изменений в переменные отправляемого скрипта при отправке (0 - показывать запрос, 1 - не показывать запрос). Если не заполнено, будет выбор при запуске скрипта. Необходимо поставить значение 1, если вы хотите поставить запуск скрипта с параметрами в cron задачу.loginname
: Логин пользователя (если не заполнен, запросит при запуске скрипта).multisend
: Количество потоков рассылки (если не заполнен, по умолчанию будет использован 1 поток).sshConnectTimeout
: Таймаут на подключение к ПК по SSH (если не заполнен, по умолчанию 5 секунд).numportssh
: Номер SSH порта (если не заполнен, по умолчанию будет использован 22 порт).sshtypecon
: Тип SSH подключения (допустимые значения:pas
- пароль,key
- ключ. Рекомендуется подключение по ключу).sshkeyfile
: Полный путь до файла закрытого ключа (еслиsshtypecon
равно “pas”, можно оставить пустым).gpgfilepass
: GPG файл с паролем подключения SSH и sudo (указать относительный путь от корня скрипта. Если не заполнен, запросит при запуске скрипта).gpgpass
: Пароль от GPG файла (если не заполнен, запросит при запуске скрипта).remotedirrunscript
: Каталог на удаленном компьютере для передачи файлов (если не существует, будет создан при наличии доступа).remotedirgroup
: Имя группы, которая будет выставлена в правах на конечный каталог, если он будет создан при выполнении скрипта.listIgnoreInaccurate
: Записи для игнорирования хостов по частичному совпадению (указать значения в строку разделяя точкой с запятой;
).listIgnoreAccurate
: Записи для игнорирования хостов по точному совпадению (указать значения в строку разделяя точкой с запятой;
).
Создать gpg файл с паролем вы можете сами или через скрипт create-gpgpassfile.sh
. Для создания ssh ключа используйте команду ssh-keygen
.
-
Если в отправляемом скрипте на удаленном компьютере нужно работать с файлами, которые требуется передать, то можно создать каталог в
./files
и поместить в него необходимые файлы. При отправке скрипта нужно выбрать каталог с файлами, который будет передан на удаленный компьютер. В своем скрипте вы можете обратится к этому каталогу через переменнуюdirfiles
(смотрите пример шапки в готовых скриптах). -
В каталоге
./scripts
находятся каталоги с отправляемыми скриптами. На текущий момент доступно 8 готовых скриптов:action-pkg
- Установка/Переустановка/Удаление пакетовcontrolusers
- Добавление/Удаление пользователей из групп и назначение/удаление МКЦ атрибутов пользователямcopyfiles-inhomeuser
- Копирование файлов в домашние директории пользователейcopyfiles-inroot
- Копирование файлов в корень системыcryptopro-install
- Установка КриптоПРОsendmessage
- Отправка сообщения пользователямsystemupdate
- Обновление системыudevrules
- Передача правил udev
-
Чтобы добавить свой скрипт в список для выбора при отправке, нужно создать каталог в
./scripts
и поместить в него скрипт с названиемsendcommand
. Например,./scripts/testscript/sendcommand
. Шаблон файла можно посмотреть в существующих скриптах в каталоге./scripts/
. Подкаталоги./scripts
сканируются на наличие файлаsendcommand
. Наименование скрипта для списка задается в переменной скриптаnamescript
. -
Файлы
temprunscript_cron
и./scripts/runcommand
не требуют ручных изменений для работы. Описание файлов:
temprunscript_cron
- подготовленный шаблон cron задачи, который автоматически меняется командами из./scripts/runcommand
, если выбран тип выполненияВыполнение в фоновом режиме через задачу cron
./scripts/runcommand
- Файл содержит функции для запуска скрипта с автовводом пароля sudo и запуска через cron задачу. Сам файл не передается на удаленный компьютер, а выполняется напрямую по ssh в base64 виде../conf/screenrc.conf
- файл конфигурации screen.
- Скрипт можно запустить из терминала с параметрами. Для вывода доступных параметров запуска нужно запустить скрипт с параметром
-help
(runscript-sendcommand.sh -help
).
Параметры запуска
-help
- Вызов справки-d значение
- Имя каталога в каталоге./files
для отправки на удаленный компьютер (Необязательный параметр). Значение с пробелом необходимо заключить в двойные кавычки.-h значение
- Имя используемого файла хостов в каталогеconf/fileshosts/
(Обязательный параметр. Пример значения:test
). Значение с пробелом необходимо заключить в двойные кавычки.-s значение
- Имя каталога отправляемого скрипта в каталогеscripts
(Обязательный параметр. Пример значения:systemupdate
). Значение с пробелом необходимо заключить в двойные кавычки.-t значение
- Тип выполнения скрипта (Обязательный параметр). Допустимые значения:
autopassudo - Неинтерактивное выполнение с автовводом пароля sudo
nopassudo - Интерактивное выполнение с ручным вводом пароля sudo и других запросов
nosudo - Выполнение без прав sudo
cronscript - Выполнение в фоновом режиме через задачу cron на удаленном ПК
-us значение
- Имя секции настроек, которую необходимо использовать (Необязательный параметр. Если необходимо, чтобы запрос с выбором секции не показывался при запуске скрипта, например, при запуске скрипта с параметрами из cron задания или терминала, то необходимо задать имя используемой секции в файле настроек или задать его через этот параметр)
Подробное описание скриптов
action-pkg
Скрипт предназначен для установки, переустановки или удаления пакетов на удаленном компьютере. Для использования необходимо задать значения необходимым переменным для выполнения. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
controlusers
Скрипт позволяет добавлять или удалять пользователей из групп, а также назначать или удалять МКЦ атрибуты пользователям. Внутри скрипта нужно задать имена пользователей в массиве, названия групп и выбрать необходимые действия, изменив значения переменных. Подробное описание доступно внутри самого скрипта. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
copyfiles-inhomeuser
Скрипт предназначен для копирования файлов в домашние директории пользователей на удаленном компьютере. Для работы скрипта необходимо создать в ./files
каталог (например, ./files/test1
), который будет условно считаться корнем домашнего каталога пользователя. В него нужно поместить файлы и папки, которые будут скопированы всем пользователям с сохранением структуры. Владельцем файлов будет пользователь, в каталог которого они копируются, а группой - его первичная группа. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
copyfiles-inroot
Скрипт предназначен для копирования файлов в корень системы на удаленном компьютере. Для работы скрипта необходимо создать каталог в любом месте на локальном компьютере, который будет условно считаться корнем системы. В него нужно поместить файлы и каталоги, которые будут распакованы в корень системы на удаленном компьютере. Если файл уже присутствует на удаленном компьютере, он будет заменен. Права на файлы и каталоги будут изменены в соответствии с правами в архиве (если пользователя или группы на удаленном компьютере нет, предусмотрите и создайте их в скрипте перед командой распаковки). Перед отправкой нужно, находясь в созданном каталоге, создать архив с помощью команды tar cpvfz scriptfiles-root.tar.gz .
(если у вас есть каталоги и файлы с правами, которые не дадут обычному пользователю обратится к ним, то создайте архив от имени root). После создания перенесите архив, не меняя имя, в подкаталог ./files
(например, ./files/test1
). При отправке необходимо выбрать этот каталог.
cryptopro-install
Скрипт предназначен для установки КриптоПРО на удаленный компьютер. Для работы скрипта необходимо распаковать архив КриптоПРО в каталог (например, ./files/cprocsp/
) так, чтобы все файлы были в корне этого каталога (./files/cprocsp/install.sh
). При отправке скрипта нужно выбрать каталог с файлами. По умолчанию, если версия совпадает, установка не производится. Можно задать принудительную установку в файле скрипта, например, если требуется изменить список пакетов. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
sendmessage
Скрипт предназначен для отправки сообщений пользователям на удаленном компьютере. Для работы скрипта необходимо в отправляемый каталог (например, ./files/sendmessage
) поместить файлы с текстом сообщения и расширением .smsg
. При выполнении скрипт ищет все файлы с расширением .smsg
и выводит сообщения пользователям. В скрипте можно настроить тип вывода сообщения (из переменной или файла). Предпочтительным способом является показ из файла (из переменной можно показать сообщение только активным на текущий момент пользователям, а пользователи, которые разблокируют систему позже, получат сообщение с пустым окном). По умолчанию все способы показа отключены, необходимо включить нужное в скрипте. Доступные способы показа сообщения: notify-send
. fly-dialog
и zenity
. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
systemupdate
Скрипт предназначен для обновления системы на удаленном компьютере. Реализовано 2 варианта обновления: apt или astra-update. По умолчанию переменная typeupdate
в скрипте не заполнена. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
udevrules
Скрипт предназначен для передачи правил udev на удаленный компьютер. Для работы скрипта необходимо создать каталог или поместить в имеющийся каталог (например, ./files/udevrules
) файлы правил udev. По умолчанию forcecopy=1
. Если необходимо передать правила с учетом включен ли МКЦ (только для Astra linux), то нужно изменить значение переменной на 0. Доступен файл script.conf для изменения переменных при отправке, без необходимости редактировать оригинальный файл скрипта.
Каталог log файлов
После выполнения скрипта в каталоге logs
будет сохранен лог выполнения. Для одного хоста и отправки одним потоком лог файл создается в корне каталога logs
, а при многопоточной отправке создается подкаталог в котором хранятся отдельные логи на каждый поток.
Каталог временных файлов temp
В создаваемом каталоге temp
хранятся временные файлы необходимые для отправки. После выполнения созданные файлы автоматически удаляются, что также показано в скрипте.
Описание шаблона файла script.conf
Рядом с файлом sendcommand можно создать файл script.conf
с указанием переменных, которые можно изменить при отправке скрипта. Для этого в файле используется массив listparam
. Для возможности выполнить изменение переменной, необходимо заполнить 3 раздела разделенные вертикальной чертой |
. Например имя-переменной|тип-переменной|Описание
.
имя-переменной
- обязательно для заполнениятип-переменной
- обязательно для заполнения-
Описание
- заполнять необязательноДопускается использовать следующие типы переменной:
number
- любое числоtext
- текстовое поле-
tf
- выбор из значений 0/1Между переменными должна быть точка с запятой
;
для разделения разных элементов массива. Например:listparam=имя-переменной1|тип-переменной|Описание;имя-переменной2|тип-переменной|Описание;
Пример на основе файла script.conf от скрипта отправки сообщения
listparam=send_notifysend|tf|Отправка через notify-send (0 - отключить, 1 - включить);send_flydialog|tf|Отправка через fly-dialog (0 - отключить, 1 - включить);send_zenity|tf|Отправка через zenity (0 - отключить, 1 - включить);typesend|text|Тип вывода сообщения. Допустимые значения: file и text;
Описание
Скрипт удаленного администрирования linux - SSSC ( Ssh Send Script Command )