README.md

Скрипт удаленного администрирования 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 имеет другое название)

На других системах работа не гарантируется и может потребовать доработок. Доработки будут по мере необходимости и возможности. По любым вопросам и проблемам со скриптом обращайтесь в личные сообщения Вконтакте.

Требования для работы скрипта и описание возможностей

  1. При запуске скрипт проверяет наличие необходимых файлов для работы. Если не найден файл необходимый для работы скрипта, то будет сообщение об ошибке, а в случае с исполняемыми файлами предлагается проверить и установить необходимые пакеты.
  • Проверяемые исполняемые файлы: 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
  1. Добавьте файлы с хостами в каталог ./conf/fileshosts для использования мультирассылки и отправки через запуск с параметрами. Каталог сканируется при выборе отправки на все компьютеры и предлагает выбрать один из найденных файлов (в случае запуска с параметрами происходит поиск введенного имени файла в каталоге fileshosts). В каждой строке файла должна быть одна запись. Для сканирования доступных ПК в сети используется программа nmap, поэтому синтаксис добавления такой же, как у nmap. Строки можно комментировать с помощью символа #. Например:

    localhost
    #10.0.50.1-255
    10.0.51.1/24
    
  2. Заполнить файл конфигурации 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.

  1. Если в отправляемом скрипте на удаленном компьютере нужно работать с файлами, которые требуется передать, то можно создать каталог в ./files и поместить в него необходимые файлы. При отправке скрипта нужно выбрать каталог с файлами, который будет передан на удаленный компьютер. В своем скрипте вы можете обратится к этому каталогу через переменную dirfiles (смотрите пример шапки в готовых скриптах).

  2. В каталоге ./scripts находятся каталоги с отправляемыми скриптами. На текущий момент доступно 8 готовых скриптов:

    • action-pkg - Установка/Переустановка/Удаление пакетов
    • controlusers - Добавление/Удаление пользователей из групп и назначение/удаление МКЦ атрибутов пользователям
    • copyfiles-inhomeuser - Копирование файлов в домашние директории пользователей
    • copyfiles-inroot - Копирование файлов в корень системы
    • cryptopro-install - Установка КриптоПРО
    • sendmessage - Отправка сообщения пользователям
    • systemupdate - Обновление системы
    • udevrules - Передача правил udev
  3. Чтобы добавить свой скрипт в список для выбора при отправке, нужно создать каталог в ./scripts и поместить в него скрипт с названием sendcommand. Например, ./scripts/testscript/sendcommand. Шаблон файла можно посмотреть в существующих скриптах в каталоге ./scripts/. Подкаталоги ./scripts сканируются на наличие файла sendcommand. Наименование скрипта для списка задается в переменной скрипта namescript.

  4. Файлы temprunscript_cron и ./scripts/runcommand не требуют ручных изменений для работы. Описание файлов:

  • temprunscript_cron - подготовленный шаблон cron задачи, который автоматически меняется командами из ./scripts/runcommand, если выбран тип выполнения Выполнение в фоновом режиме через задачу cron
  • ./scripts/runcommand - Файл содержит функции для запуска скрипта с автовводом пароля sudo и запуска через cron задачу. Сам файл не передается на удаленный компьютер, а выполняется напрямую по ssh в base64 виде.
  • ./conf/screenrc.conf - файл конфигурации screen.
  1. Скрипт можно запустить из терминала с параметрами. Для вывода доступных параметров запуска нужно запустить скрипт с параметром -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 )

Релизы
Конвейеры
0 успешных
0 с ошибкой