Helcode | Хелкод | Скрипты и автоматизация
993 subscribers
52 photos
34 links
☎️ Контакты для связи: @helcodeadm
Download Telegram
Автоматизация пентеста: сканирование уязвимостей в один клик

🔓 Хотите проверить свою сеть? Автоматизируем поиск дыр!

1. Быстрое сканирование открытых портов (Nmap)
nmap -sV -T4 192.168.1.0/24 -oN scan.txt  



2. Проверка уязвимостей (Nikto для веба)
nikto -h http://example.com -output vuln.html  



3. Автоматический отчёт (сборка в HTML)
nmap -sV --script=vulners -oX scan.xml 192.168.1.1  
xsltproc scan.xml -o report.html



❗️Важно:
- Делайте только с разрешения!
- Для автоматизации используйте Metasploit Framework или OpenVAS.

Какие инструменты для пентеста вы используете чаще всего?

P.S. Если Nmap ругается на права, попробуйте sudo или nmap -Pn.


🌐 @helcode | #bash
👍5
Скрипт, который автоматически пишет вам оправдания

Генератор случайных "технических" оправданий для начальства. Пост шуточный, всерьез не воспринимайте :)

Python-скрипт
import random  

excuses = [
"Это баг в библиотеке, уже фиксят.",
"Коллега задеплоил без тестов.",
"DNS-кеш.",
"Виноват рефакторинг.",
"Это фича, а не баг.",
]

print(random.choice(excuses))



Bash-версия
#!/bin/bash  

excuses=(
"Это баг в библиотеке, уже фиксят."
"Коллега задеплоил без тестов."
"DNS-кеш."
)

echo ${excuses[$RANDOM % ${#excuses[@]}]}



Какое ваше любимое "техническое" оправдание?

P.S. Если скрипт выдаёт одно и то же, проверьте $RANDOM. Или вините кеш.


🌐 @helcode | #python #bash
👍2
Сколько стоит ваш час? Экономика автоматизации

📖 Миф: «Написание скриптов не окупается».

👉 Реальность: выгода — не только в скорости. Вот что вы упускаете:
1. Когнитивная нагрузка — не нужно запоминать шаги.
2. Цена ошибки — один баг в ручном процессе может стоить дорого.
3. Масштабируемость — ручная работа = линейные затраты, скрипт = 0.

⚙️ Пример:
Скрипт для бэкапа (2 часа на разработку) vs ручное копирование (1 час в день).
Через неделю — экономия 5 часов!

Сколько времени тратите на рутину? Давайте прикинем выгоду от автоматизации.

🌐 @helcode
👍7💯1
Идеальный скрипт: 6 обязательных элементов

Хотите, чтобы скрипты жили долго и не ломались? Добавьте:
1. Метаинформацию (автор, версия) — иначе через месяц забудете, зачем это.
2. Обработку ошибок — if ! command; then exit 1; fi.
3. Логирование — logger -t "скрипт начался".
4. Параметры — THRESHOLD_DAYS=${1:-7}.
5. Документацию — хотя бы комментарии.
6. Тесты — хотя бы «сухой прогон».

Шаблон для Bash:
#!/bin/bash  
# Автор: Вася Пупкин
# Версия: 1.1
# Назначение: Чистит логи старше N дней

LOG_DIR="/var/log"
DAYS=${1:-30} # Параметр по умолчанию

if ! find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete; then
echo "Ошибка удаления! Проверьте права." >&2
exit 1
fi



Какой элемент кажется вам самым сложным?

🌐 @helcode | #bash
👍4🔥21
Скрипты или готовый софт - что выбрать?

🔧 Скрипты идеальны для:
- Нестандартных задач
- Быстрого реагирования
- Маленьких инфраструктур

⚙️ Готовый софт (Zabbix, Prometheus) для:
- Крупных систем
- Сложной аналитики
- Долгосрочного хранения данных

❗️Главное правило:
> Если скрипты закрывают ваши задачи — не усложняйте.

А вы используете скрипты или готовые системы? Делитесь в комментариях!

🌐 @helcode
👍3
Вредный совет: как обойти auditd?

🛡Для тестирования защиты

1. Остановка auditd:

   sudo systemctl stop auditd


- Защита: мониторинг статуса службы через cron.

1. Удаление правил:

   sudo auditctl -D


- Защита: запрет auditctl для обычных пользователей.

1. Перезапись логов:

   echo "" > /var/log/audit/audit.log


- Защита: настройка immutable-флагов на файлы.

❗️Важно: эти методы — только для проверки своих систем!

🌐 @helcode | #bash
👍1😁1
Как автоматизировать создание виртуальных машин?

🫸 Хватит тыкать в GUI — создаём ВМ скриптом!

Ручное создание виртуальных машин — это прошлый век.

⚙️ Автоматизируем это с помощью Vagrant и PowerShell.

Вариант 1: Vagrant (кроссплатформенная магия)
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end

Запуск:
vagrant up  # Создаёт и запускает ВМ
vagrant ssh # Подключается к ней


Вариант 2: Hyper-V + PowerShell
# Создаём новую ВМ
New-VM -Name "MyServer" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\MyServer.vhdx" -NewVHDSizeBytes 50GB
Set-VMProcessor -VMName "MyServer" -Count 2
Start-VM -Name "MyServer"


Вопрос к вам:
Какие инструменты вы используете для автоматизации виртуальной инфраструктуры? Vagrant, Terraform, или что-то своё?

P.S. Если Vagrant говорит «box not found», проверьте, установили ли вы бокс командой vagrant box add ubuntu/focal64


🌐 @helcode | #bash #powershell
👍1
Тренды автоматизации 2025

Что потенциально будет актуально через год?

1. Адаптивные скрипты — сами подстраиваются под нагрузку (например, масштабируют сервисы).
2. Визуальные workflow — карты процессов вместо тысяч строк кода.
3. Самодокументация — GPT, которая пишет описание для вашего кода (но стоит ли доверять?).

Пример адаптивного скрипта на Python:
# Мониторит CPU и решает, добавлять ли ресурсы  
if current_cpu > threshold:
scale_up(servers=1)
log("Выполнено масштабирование из-за нагрузки")


Нужно ли учить AI-инструменты для автоматизации? Или старый добрый Bash рулит?


🌐 @helcode | #python
👌1
Как работать с API в PowerShell?

Отправляем запросы, не выходя из консоли!

PowerShell предлагает супер-удобные cmdlets для работы с REST API.

Базовый пример: GET-запрос
# Простой запрос
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.name

# С заголовками
$headers = @{
"Authorization" = "token YOUR_TOKEN"
}
$response = Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Headers $headers


Отправка данных (POST)
$body = @{
name = "NewRepo"
description = "Created via PowerShell"
} | ConvertTo-Json

Invoke-RestMethod -Uri "https://api.github.com/user/repos" -Method Post -Body $body -Headers $headers -ContentType "application/json"


💬 Обсуждение:
С какими API вам чаще всего приходится работать? Расскажите о своих кейсах!

P.S. Если Invoke-RestMethod тормозит, попробуйте добавить -DisableKeepAlive

🌐 @helcode | #powershell
👍1
Коллеги, всех приветствую!

Думаю, многим знакома рутина: чтобы протестировать новую фичу или настроить базу данных, нужны тонны правдоподобных, но фейковых данных. Делать вручную — долго и скучно.

В новой статье на Хабре разбираем, как автоматизировать этот процесс с помощью библиотеки Faker. Это настоящая фабрика по производству любых данных: от имён и email до полных адресов, номеров кредитных карт и даже текстов Lorem Ipsum.

В материале вас ждёт:
Базовое использование — генерация самых популярных типов данных.
Работа с провайдерами: как создавать специфичные данные (для РФ, например).
Создание собственных провайдеров под уникальные задачи.

https://habr.com/ru/articles/940056/
👍4
Самая частая ошибка в cron: «Команда не найдена»

Знакомая история? Скрипт отлично runs из терминала, но в  cron падает с ошибкой command not found.

Всё потому, что cron работает в минимальном окружении! У него своя, очень скудная переменная PATH (часто просто /usr/bin:/bin). Он не видит ваши $HOME/.bashrc и любимые ~/bin.

Решение простое и железное: ВСЕГДА использовать полные пути!

 * * * * * myscript.sh
 * * * * * /home/user/scripts/myscript.sh

 * * * * * python3 script.py
 * * * * * /usr/bin/python3 /path/to/script.py

Найти полный путь к любой команде можно через which или whereis:
which python3
whereis node

Вывод: полные пути — это маст-хэв для любого крона.

🌐 @helcode | #linux #cron #ошибки #администрирование
4👍2
Pester: как писать тесты для скриптов?

Ваши скрипты заслуживают тестов!

🛠 Pester — это фреймворк для тестирования PowerShell-кода. Вот как начать.

Простейший тест
# Создаём файл MyScript.Tests.ps1
Describe "Проверка функций моего модуля" {
It "Сложение 2+2 должно возвращать 4" {
(2 + 2) | Should -Be 4
}

It "Функция Get-Hello возвращает приветствие" {
Get-Hello -Name "Alice" | Should -Be "Hello, Alice"
}
}


Запуск тестов
Invoke-Pester -Path .\MyScript.Tests.ps1


Реальный пример: тестирование функции
# BeforeAll {
# . .\MyScript.ps1 # Подгружаем тестируемый скрипт
# }

Describe "Get-Hello" {
It "Должна возвращать правильное приветствие" {
Get-Hello -Name "World" | Should -Be "Hello, World"
}
}


Пишете ли вы тесты для своих скриптов? Если да, поделитесь лучшими практиками!

P.S. Если тесты не запускаются, проверьте, установлен ли Pester: Install-Module -Name Pester -Force


🌐 @helcode | #powershell #windows #тест
Когда Nmap не справляется (практичные альтернативы)

Nmap тормозит на большой сети?

🛠 Есть решения быстрее и тише.

1️⃣ Masscan: самое быстрое сканирование интернета. Асинхронный движок.
- Для чего: когда нужно просканировать /16 или больше за минуты.
- Команда: masscan -p1-65535 10.0.0.0/16 --rate=100000

2️⃣ RustScan: modern-альтернатива на Rust. Находит открытые порты, а затем передает их в Nmap для детального анализа.

- Для чего: сочетание скорости Masscan и мощи Nmap.
- Команда: rustscan -a <target> -- -A -sC // Найдет порты RustScan, просканирует Nmap

3️⃣ Naabu: еще один быстрый сканер портов на Go, часто используется в связке с другими инструментами пентеста.
- Для чего: для интеграции в автоматизированные пайплайны.

🏁 Итог: используйте Nmap для точечного и детального анализа. Для сканирования огромных диапазонов — masscan или rustscan.

🌐 @helcode | #bash #masscan #rustscan #альтернативы #производительность
👍3
Telegram-бот для алертов — просто и бесплатно

Telegram — идеальный канал для уведомлений:
1. Мгновенные push-уведомления
2. Бесплатно
3. Простая интеграция

🔧 Пример отправки алерта на Python:
python  
requests.post(f"https://api.telegram.org/botTOKEN/sendMessage",
json={"chat_id": "ID", "text": "🚨 CPU > 90%!"})



Что можно мониторить?
✔️ Загрузка CPU/диска
✔️ Ошибки в логах
✔️ Изменения конфигов (inotifywait)

👉 Настроив бота, вы будете первым узнавать о проблемах!

🌐 @helcode | #telegram #bot
👍2
Выбор инструмента для работы с API: requests, httpx или aiohttp?

Стандартный подход к работе с внешними API часто начинается с функции requests.get(). Однако в продакшене возникают дополнительные требования: обработка ошибок, повторные попытки подключения, асинхронные вызовы и поддержка современных протоколов. Правильный выбор библиотеки позволяет повысить надежность и эффективность кода.

👨‍🔬 Рассмотрим три популярные библиотеки для работы с HTTP-запросами в Python.

1. requests (Стандарт для синхронных запросов)
Оптимальное решение для большинства синхронных задач.
import requests
response = requests.get('https://api.example.com/data', timeout=5)
data = response.json()

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

Ограничения: требуется самостоятельная реализация повторных попыток и кэширования.

2. httpx (Современный синхронный и асинхронный клиент)
Поддерживает современные стандарты, включая HTTP/2 и асинхронные операции.
import httpx
# Асинхронный режим
async with httpx.AsyncClient() as client:
response = await client.get('https://api.example.com/data')
data = response.json()

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

Ограничения: для использования асинхронного режима требуется понимание принципов async/await.

3. aiohttp (Специализированная библиотека для асинхронных задач)*
Предназначена для построения высокопроизводительных асинхронных приложений.
import aiohttp
import asyncio

async def fetch_data():
async with aiohttp.ClientSession() as session:
async with session.get('https://api.example.com/data') as resp:
return await resp.json()

# Запуск асинхронной функции
data = asyncio.run(fetch_data())

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

Ограничения: требует глубокого понимания асинхронного программирования.

Критерии выбора:
* Стандартные синхронные задачи: requests
* Современные проекты с поддержкой HTTP/2: httpx
* Высоконагруженные асинхронные приложения: aiohttp

Какой подход к работе с API вы используете в своих проектах?
1. requests (синхронный подход)
2. httpx (современное решение)
3. aiohttp (асинхронная обработка)
4. Другое (укажите в комментариях)

P.S. Сравнительный анализ библиотек помогает выбрать оптимальное решение для конкретных задач разработки, учитывая требования к производительности и масштабируемости.
🔥21
Как мониторить логи в реальном времени?

Не ждите, пока пользователи пожалуются — ловите ошибки сразу!

Мониторинг Nginx/Apache:
tail -f /var/log/nginx/error.log | grep --line-buffered "error\|failed" | while read line; do  
echo "Warning! $line" | send_to_telegram.sh
done



Отслеживание системных ошибок (journalctl):
journalctl -f -u your_service | grep -i "critical\|error"  



Инструмент inotifywait для отслеживания изменений файлов:
inotifywait -m /etc/nginx -e modify | while read path action file; do  
echo "Файл $file изменён! Проверьте конфиг!"
done



👉 Так вы узнаете о проблемах раньше пользователей.

🌐 @helcode | #bash #мониторинг #логи
🔥4
Как работать с JSON в PowerShell?

🔧 Парсим, создаём и преобразуем JSON без боли!

PowerShell легко конвертирует объекты в JSON и обратно.

👨‍🔬 Преобразование объекта в JSON
$user = @{
name = "Alice"
age = 30
hobbies = @("coding", "gaming")
}
$user | ConvertTo-Json -Depth 3

# Результат:
# {
# "name": "Alice",
# "age": 30,
# "hobbies": ["coding", "gaming"]
# }


📖 Чтение JSON из файла
$data = Get-Content -Path "config.json" -Raw | ConvertFrom-Json
$data.name


Работа с вложенными свойствами
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
$response.login
$response.created_at


💬 Обсуждение:
Какие самые интересные задачи с JSON вам приходилось решать в PowerShell?


P.S. Если ConvertFrom-Json ругается на глубину, увеличьте параметр -Depth


🌐 @helcode | #powershell #json #автоматизация
👍1
try-except: спасательный круг или тихий убийца вашего кода?

⚙️ Конструкция try-except — первый инструмент, который приходит на ум для обработки ошибок. Но ее неаккуратное использование может скрыть критические проблемы, привести к неожиданному поведению программы и затруднить отладку. Слишком широкий except — все равно что лечить все болезни обезболивающим: симптомы уйдут, а причина останется.

Рассмотрим частые ошибки и способы их избежать.

⚠️ Ошибка 1: слишком широкий обработчик исключений
Такой код перехватит все исключения, включая системные (например, KeyboardInterrupt).
# ПЛОХО: Перехватывает вообще всё
try:
risky_operation()
except: # <- Ничего не указано!
print("Что-то пошло не так")


Решение: явно указывайте типы исключений, которые вы ожидаете и можете обработать.
# ХОРОШО: Точечная обработка
try:
risky_operation()
except (ValueError, IndexError) as e: # <- Конкретные исключения
print(f"Обработали ожидаемую ошибку: {e}")


⚠️ Ошибка 2: "глухой" обработчик (silent failure)
Код проглатывает ошибку, и программа продолжает работать в невалидном состоянии.
# ОПАСНО: Ошибка просто исчезает
try:
save_to_database(data)
except:
pass # Ничего не происходит. Данные не сохранены, а мы и не знаем.


Решение: всегда как минимум логируйте исключение.
# ЛУЧШЕ: Фиксируем проблему
import logging

try:
save_to_database(data)
except DatabaseError as e:
logging.error(f"Ошибка записи в БД: {e}") # Сообщение в лог
# Возможно, здесь стоит повторно бросить исключение или выполнить иное действие


⚠️ Ошибка 3: непреднамеренная обработка исключений в цикле
Одно исключение внутри цикла может остановить всю обработку, если перехватывать его неправильно.
# Осторожно: Одна ошибка прервет весь цикл
data = [1, 2, "three", 4, 5] # Строка вызовет TypeError при сложении
total = 0
for num in data:
try:
total += num
except TypeError:
# Обработали для элемента "three", цикл продолжается
print(f"Элемент {num} не является числом")
print(total) # 12


Ключ к эффективному использованию try-except — предсказуемость. Обрабатывайте только те ошибки, которые вы можете корректно исправить или проинформировать о них систему логирования. Все остальные исключения лучше позволить всплыть наверх, где их обработает более общий обработчик или где разработчик увидит понятный traceback.

P.S. Правильно настроенная обработка исключений — это не про то, чтобы скрыть проблемы, а про то, чтобы управлять ими предсказуемо и предоставлять четкую информацию для диагностики.


🌐 @helcode | #python #автоматизация
👍2
Самовосстановление — как скрипты могут чинить сервера?

🚨 Проблема: сервис упал, диск переполнен, а вас нет на месте.

🛠 Решение: скрипты, которые не только мониторят, но и исправляют!

Авторестарт сервиса, если он упал:
if ! systemctl is-active --quiet nginx; then  
systemctl restart nginx
curl -X POST "https://api.telegram.org/.../sendMessage" -d "chat_id=...&text=NGINX перезапущен!"
fi



Очистка диска при нехватке места:
if [ $(df / --output=pcent | tail -1 | tr -d '%') -gt 90 ]; then  
find /var/log -type f -mtime +7 -delete
fi



Блокировка IP при атаке (fail2ban альтернатива):
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | awk '$1 > 3 {print $2}' | while read ip; do  
iptables -A INPUT -s $ip -j DROP
done



👉 Настроил и забыл — скрипты работают за вас!

🌐 @helcode | #bash #скрипты
👍5👎1
Лучшие модули для DevOps

🛠 Набор must-have инструментов для каждого инженера!

Вот список модулей, которые реально экономят время.

1. PSWindowsUpdate
Install-Module -Name PSWindowsUpdate -Force
Get-WindowsUpdate -Install -AcceptAll -AutoReboot


2. Az (Azure PowerShell)
Install-Module -Name Az -Force
Connect-AzAccount
Get-AzVM


3. DBATools (для работы с БД)
Install-Module -Name dbatools -Force
Get-DbaDatabase -SqlInstance "server01" | Where-Object Name -eq "mydb"


4. PSScriptAnalyzer (проверка качества кода)
Install-Module -Name PSScriptAnalyzer -Force
Invoke-ScriptAnalyzer -Path .\MyScript.ps1


5. ImportExcel (работа с Excel без Excel)
Install-Module -Name ImportExcel -Force
Get-Process | Export-Excel -Path "processes.xlsx"


Вопрос:
Какие ваши любимые модули PowerShell? Дополните список!


P.S. Если модуль не устанавливается, проверьте политику выполнения: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser


🌐 @helcode | #powershell
👍4
Куда смотрят логи? Настраиваем логирование для cron

Молчащий cron — самый опасный. Выполнилась задача или упала с ошибкой? Без грамотного логирования вы никогда не узнаете.

По умолчанию cron пытается отправить вывод на почту (MAILTO), но это часто не работает.

Берём логирование в свои руки!

Перенаправляем вывод (stdout + stderr) в файл:
* * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

Можно и раздельно:
* * * * * /path/to/script.sh >> /var/log/myscript.log 2>> /var/log/myscript.error.log

Профи-фишка: Логи с датой в названии для ротации.
0 0 * * * /path/to/daily_backup.sh >> "/var/log/backup_$(date +\%Y\%m\%d).log" 2>&1

❗️Важно: экранируйте `%` знаками обратного слеша, чтобы `cron` их не воспринял как перенос строки!

🌐 @helcode | #linux #cron #logging #debugging
👍71