Bashmator - консольный менеджер скриптов, основанный на формате YAML.
Основная задача программы - предоставить простую и универсальную систему для хранения, поиска, запуска и логирования большого количества небольших скриптов и однострочников.
Как это работает
Каждый скрипт вносится в YAML файл. В этом файле с помощью ключей задаются аргументы командной строки, параметры подстановки их значений в код скрипта, используемая оболочка, а также информация, по которой этот скрипт можно будет найти.
YAML файлы хранятся в папке (библиотеке). Для каждой библиотеки bashmator собирает необходимую информацию о доступных скриптах и поддерживает её актуальность, чтобы обеспечить возможность быстрого поиска.
Установка
Устанавливать bashmator рекомендуется через pipx. Пример:
sudo pipx install bashmator --global
В комадной строке станет доступен под короткими названиям bashmator и bshm.
Далее рекомендуется добавить оболочку и пересканить библиотеку:
bashmator shell add /usr/bin/bash
bashmator library scan -f
Использование
|
Оболочки
Не смотря на название, bashmator способен работать не только с bash. Ниже представлены примеры команд добавления некоторых других оболочек, интерпритаторов и программ:
Linux
bashmator shell add /usr/bin/zsh
bashmator shell add /usr/bin/python3
bashmator shell add /usr/bin/node --popen-args '["-e"]'
bashmator shell add /usr/bin/msfconsole --popen-args '["-q", "-x"]'
Windows
⚠️ Для powershell и cmd важно указать кодировку, что бы логирование с помощью
use -o <file> ...работало корректно
bashmator shell add C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --popen-args "['-Command']" --encoding 'cp866' --name powershell
bashmator shell add C:\Windows\System32\cmd.exe --popen-args "['/C']" --encoding 'cp866' --name cmd
bashmator shell add C:\...path\to\python\...\python.exe --name python3
Потенциально bashmator может работать с любыми интерпритаторами, способными принимать последовательность команд из аргументов командной строки. Флаг, отвечающий за прием последовательности команд, должен всегда располагаться в конце списка, передаваемого в аргументе --popen-args.
Создание библиотек
Рекомендуется создавать собственные библиотеки, а не добавлять свои скрипты в библиотеку по умолчанию.
Библиотекой будет считаться любой каталог, содержащий следующие подкаталоги:
-
files- каталог для файлов, используемых в скриптами. Полезен для повышения совместимости. -
modules- каталог для YAML файлов.
Данные подкаталоги могут иметь собственные подкаталоги - bashmator будет их учитывать в работе.
Добавить библиотеку в bashmator и выбрать её для использования:
bashmator library add <path to library>
bashmator library use <library name>
Создание YAML модулей
Минимальная структура, необходимая для работы:
shell: <SHELL NAME>
script: |-
<YOUR CODE>
Общая структура
author: <NAME>
description: <TEXT>
tags:
- <TAG1>
- <TAG2>
- ...
install: <INSTALLATION INFORMATION>
arguments:
<ARG NAME>:
default: <EMPTY, STRING OR LIST>
description: <TEXT>
metavar: <STRING>
multiple: <TRUE | FALSE>
replacer: <VALUE REPLACER>
regex: <REGEX STRING>
<OTHER ARG NAME>:
...
...
mode:
readfile:
- <ARG NAME>
...
replace:
<ARG NAME>:
<VALUE TO REPLACE>: <REPLACEMENT>
loop: <ARG NAME>
format:
<ARG NAME>: <.format() TEMPLATE>
<OTHER ARG>: ...
...
join:
<ARG NAME>: <DELIMITER>
<OTHER ARG>: ...
...
pformat:
<ARG NAME>: <.format() TEMPLATE>
<OTHER ARG>: ...
...
shell: <MAIN SHELL SHORT NAME OR PATH>
script: |-
<YOUR MAIN CODE>
file_<NUMBER>:
path: <SHORT PATH TO FILE AT LIBRARY/FILES DIRECTORY>
replacer: <FULL PATH REPLACER>
description: <TEXT>
file_<OTHER NUMBER>:
...
...
item_<NUMBER>:
shell: <OTHER SHELL SHORT NAME OR PATH>
description: <TEXT>
mode:
<SAME STRUCTURE AS AT MAIN>
script: |-
<YOUR OTHER CODE>
item_<OTHER NUMBER>:
...
...
Описание ключей:
author
Содержит имя автора модуля, используется для поиска и удовлетворения чувства собственной значимости😅. Пример:
author: vinzekatze
description
Содержит общую информацию о работе скрипта, которая будет выведена при вызове помощи use <script name> -h или use <script name> --help.
Для большего удобства рекомендуется использовать |-. Пример:
description: |-
Набор однострочников для получение базовой DNS информации
tags
Содержит список тегов, по которым можно будет найти скрипт с помощью команды search. Пример:
tags:
- 53
- dns
- recon
install
Содержит информацию о ПО, которое необходимо установить для правильной работы скрипта. Данная информация будет отображена при вызове скрипта с помощью команды use -i <script name>.
Если есть возможность, рекомендуется писать сразу последовательность команд для установки, либо явно указывать, что установка чего-либо не требуется. Пример:
install: |-
sudo apt update -y && sudo apt install dnsrecon -y
arguments
Содержит имена аргументов и их параметры. На основе заданных тут данных bashmator создает CLI для скрипта.
Рекомендуется использовать полные названия для позиционных аргументов, и однобуквенные для опций.
replacer по умолчанию: #[ARGUMENT NAME]#
Общий вид:
arguments:
n:
default: 42
metavar: NUM
regex: \d+
arg:
replacer: __B__
multiple: true
description: bla bla bla
Ключи аргументов:
defaultОпределяет значение аргумента по умолчанию, либо список возможных значений. Если Если a:
default: 53
Если a:
default:
-
Если a:
default:
- https://
- http://
Если arg:
default:
-
- one
- two
descriptionСодержит описание назначения аргумента, которое будет выведено при вызове помощи arg:
description: очень важный аргумент
metavarКосметический ключ, позволяющий задать свое метазначение для опций. На позиционные аргументы не влияет. Пример: arg:
default: 42
metavar: MY_METAVAR
Отображение:
multipleОпределяет, может ли аргумент принимать множественные значения, или нет. По умолчанию arg:
multiple: true
replacerСодержит строку, котороя будет заменятья в коде скрипта (ключ Реплейсеры в коде скрипта заменяются в том порядке, в каком описаны ключи в Если ключ отсутвует либо пуст, то реплейсер принимает значение Пример реплейсеров и скрипта: arguments:
arg:
replacer: -+PLACEHOLDER+-
script: >-
cat -+PLACEHOLDER+- | ncat 127.0.0.1 9090
regexПозволяет задать регулярное выражение, с помощью которого будут проверяться значения аргумента. Не прошедие проверку значения будут вызывать ошибку и не позволять запустить скрипт. Для проверки используется функция Пример: arguments:
ip:
regex: >-
((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3,3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])
script: 'echo #ip# is ok'
Реакция скрипта на ввод:
|
mode
Используется для модификации значений аргументов. Общий вид:
mode:
readfile:
- arg2
replace:
arg3:
v1: value1
v2: value2
loop: arg1
format:
arg2: '{0!r}'
join:
arg2: ','
arg3: ';'
pformat:
arg2: ' [ {} ] '
Ключи mode:
readfileСодержит список имен аргументов, которые будут интерпритированы как имена файлов. Данные файлы будут читаться построчно, а считанные строки будут подставляться в скрипт на место реплейсера. Если файла не существует, то будет подставлено входящиее значение аргумента. Пример: shell: bash
arguments:
arg1:
description: test
mode:
readfile:
- arg1
script: >-
echo #arg1#
Содержимое файла
Если запустить скрипт с аргументом echo one two three
replaceПодзволяет заменять значения аргументов. Содержит в себе имена аргументов в качестве ключей, которые в свою очередь содержат замены в виде Пример: shell: bash
arguments:
arg1:
default:
- A
- B
- C
mode:
replace:
arg1:
A: One
B: Two
script: >-
echo #arg1#
В данном примере, когда на вход скрпта в аргумент loopЕсли содержит имя множественного аргумента ( Пример: shell: bash
arguments:
arg1:
multiple: true
mode:
loop: arg1
script: >-
echo -n #arg1#; echo ' end'
Результат выполнения скрипта c аргументами
formatСодержит имена аргументов в качестве ключей и шаблоны python функции Для множественных аргументов форматирование производится для каждого из значений отдельно. Операция Обычно этот ключ применяется для правильной подстановки неоднозначных значений с использованием шаблона Пример: shell: bash
arguments:
arg1:
default:
-
arg2:
multiple: true
mode:
format:
arg1: >-
| tee {0!r}
arg2: >-
{0!r}
script: >-
echo #arg1# #arg2#
Если запустить скрипт с аргументами echo 'a' 'd' 'c' 'r' 't'
Если с аргументами echo 'a' 'd' 'c' 'r' 't' | tee './test.txt'
joinСодержит имена множественных аргументов ( Пример: join:
arg1: ','
В этом случае значения множественного аргумента
pformatТоже что и |
shell
В данном ключе указывается короткое имя оболочки, используемой для запуска скрипта, либо путь до неё.
В целях улучшения совместимости рекомендуется добавлять оболочки в bashmator с помощью bashmator shell add, а в ключе shell указывать их короткие имена.
Данный ключ обязателен, если отсутствуют ключи item_[NUMBER], либо для каждого из них не заданы shell отдельно.
Пример:
shell: bash
Это тоже сработает, но так делать не рекомендуется:
shell: /usr/bin/bash
script
Содержит непосредственно код скрипта, который будет исполняться. Не забудьте вставить реплейсеры аргументов!
Чтобы записывать многострочные скрипты используйте |-. Чтобы записать однострочник, но в коде использовать перенос строки, используйте >-
Пример 1:
script: |-
ls -la
rm -r ./
Пример 2:
script: >-
ls -la;
rm -r ./
file_[NUMBER]
Используется для подстановки полных путей файлов из директории files библиотеки.
replacer по умолчанию: #file_[NUMBER]#
Общий вид:
file_1:
description: My Wordlist
path: dicts/my_wordlist.txt
file_2:
description: My Big Script
path: scripts/big_script.sh
replacer: __BIG_SCRIPT__
quote:
- '"'
- '\'
Ключи file_[NUMBER]:
path
Содержит путь до файла в библиотеке относительно директории file_1:
path: lorem/lorem.txt
Так же можно обращаться к файлам по полному пути и использовать возвраты в родительскую директорию, но этого делать не рекомендуется. Скорее всего я закрою эту возможность спустя какое-то время, так как это больше баг, чем фитча 🥲. replacerРаботает аналогично ключу descriptionСодержит краткое описание файла, которое будет выведено при вызове помощи quoteПри наличии использует первый символ из списка для заковычивания пути, а второй - для экранирования аналогичного символа, если он в изначальном пути содержится. Пример: file_1:
path: "lorem folder/lorem'.txt"
quote:
- "'"
- '\'
При выполнении подставит следующую строку:
|
item_[NUMBER]
Используется для добавления дополнительных скриптов в один модуль. Это удобно, когда разные скрипты принимают на вход одни и те же аргументы и объеденены общим смыслом.
Если существуют item, то в CLI добавляется опция --item, которая позволяет вызывать подскрипты по номеру. Для массового запуска можно использовать последовательности: --item 1,2,4-6.
Если вместе с item существует основной script, то ему будет присвоен номер 0. Запускаться по умолчанию будет только он.
Общий вид:
item_1:
description: script 1
shell: python3
script: |-
print(1+2)
item_2:
description: script 2
mode:
loop: arg1
script: echo _ARG1_
Ключи item_[NUMBER]:
shellРаботает аналогично ключу modeРаботает аналогично ключу Чтобы отметить действие item_2:
script: echo _A_
mode:
loop:
descriptionСодержит краткое описание назначения script
Работает аналогично главному |
Примеры YAML модулей представлены во встроенной библиотеке:
$ bashmator search examples
Search results:
script name | status | tags
------------------------------+----------+-----------------------------
examples/args/choice | OK | help, manual, arguments
examples/args/choice_default | OK | help, manual, arguments
examples/args/default | OK | help, manual, arguments
examples/args/default_empty | OK | help, manual, arguments
examples/args/flag | OK | help, manual, arguments
examples/args/metavar | OK | help, manual, arguments
examples/args/multiple | OK | help, manual, arguments
examples/args/regex | OK | help, manual, arguments
examples/args/replacer | OK | help, manual, arguments
examples/args/simple | OK | help, manual, arguments
examples/files/replacer | OK | help, manual, files
examples/files/simple | OK | help, manual, files
examples/items/default | OK | help, manual, items
examples/items/mode | OK | help, manual, items
examples/items/shell | OK | help, manual, items
examples/items/simple | OK | help, manual, items
examples/minimal | OK |
examples/mode/format | OK | help, manual, mode
examples/mode/format_empty | OK | help, manual, mode
examples/mode/join | OK | help, manual, mode
examples/mode/loop | OK | help, manual, mode
examples/mode/pformat | OK | help, manual, mode
examples/mode/readfile | OK | help, manual, mode
examples/mode/replace | OK | help, manual, mode
examples/simple | OK | help, manual, informational
Пример работы
Ниже представлен пример запуска скрипта examples/args/simple:
Аргументы командной строки, сгенерированные из YAML
$ bashmator use examples/args/simple -h
usage: examples/args/simple [-h] arg
Example of a simple required argument
.................................................................
positional arguments:
arg random string
options:
-h, --help show this help message and exit
Shell: bash
Author: demo
Tags: help, manual, arguments
Запуск скрипта с включенной опцией логирования
$ bashmator use -o example.log examples/args/simple blablabla
Input: blablabla
Содержимое записанного файла example.log
$ cat example.log
+-------------------------------------------------------------------------------
+ Generated by bashmator 1.1.1
+-------------------------------------------------------------------------------
+ Script name: examples/args/simple (0)
+ Start time: 2023-06-29 16:11:25 (UTC)
+ Shell: /usr/bin/bash -c
+-------------------------------------------------------------------------------
+ Running code
+-------------------------------------------------------------------------------
echo 'Input: blablabla'
+-------------------------------------------------------------------------------
+ Log
+-------------------------------------------------------------------------------
Input: blablabla
+-------------------------------------------------------------------------------
+ End time: 2023-06-29 16:11:25 (UTC)
+-------------------------------------------------------------------------------
Доступные библиотеки
Общего назначения для kali linux:
Тестирование WiFi для kali linux на Raspberry Pi 4:
Metadata
Release files for bashmator 1.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bashmator-1.1.9.tar.gz | 46.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bashmator-1.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 94.2 kB
Release files / bashmator-1.1.9.tar.gz
| Download URL | bashmator-1.1.9.tar.gz |
|---|---|
| Size | 46.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5dbdd0d9c685673700c9b9dcb062f6b6ffeecd5f0a6be9b3b0aef8b67a270da5
|
|
BLAKE2b-256 checksum How to use checksums |
cdd8ec4a9a940afbe530a673f07c446c5edfe2621a0195a1272dce7f8471b478
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-85-generic
|
Release files / bashmator-1.1.9-py3-none-any.whl
| Download URL | bashmator-1.1.9-py3-none-any.whl |
|---|---|
| Size | 47.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8abe454f6ce7ce9aca1d88550ce18f95849961f23972b8b7e3f559f54f5b06a1
|
|
BLAKE2b-256 checksum How to use checksums |
22ff628b695cb72bf058b776227deb18af0d50a1d938da499772a0f743a5f42d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-85-generic
|