Admin Future
241 subscribers
51 photos
1 video
4 files
120 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
Windows: Запуск скриптов с правами администратора

Каждый Windows-админ сталкивался с ситуацией: нужен скрипт, который должен работать с правами администратора. Настроить службы, поправить реестр или перезапустить системный процесс без UAC-подтверждения? Можно автоматизировать.

▪️ Проблема
По умолчанию Python-скрипты запускаются от имени обычного пользователя. Это ограничивает работу с системными настройками и требует «ручного» запуска через правый клик.

▪️ Решение — библиотека pyuac
Пример кода:

from pyuac import isUserAdmin, runAsAdmin

def main():
print("Я запущен как админ!")

if __name__ == "__main__":
if not isUserAdmin():
runAsAdmin()
else:
main()

▪️ Как это помогает
Скрипт сам проверяет уровень прав. Если они недостаточные — перезапускает себя с UAC-запросом. Минимум действий от пользователя, максимум автоматизации.

🧠 Для админа: такой приём пригодится для сервисных скриптов и утилит, которые должны работать «бесшовно».

#Windows #Python #SysAdmin #Automation
Linux: "Служба" своими руками. Пишем systemd unit-файл

Хватит запускать важные скрипты "руками" через nohup ./script.sh &. Путь инженера — превратить любой скрипт или приложение в управляемую службу. В современном Linux это делается через systemd unit-файлы.

Задача: Превратим простой Python веб-сервер в службу my-app.service.
1. Ваш скрипт (для примера /opt/my-app/app.py):

Python

#!/usr/bin/env python3
# Простой веб-сервер
from http.server import HTTPServer, BaseHTTPRequestHandler

class SimpleHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello from Admin Future!')

httpd = HTTPServer(('0.0.0.0', 8000), SimpleHandler)
httpd.serve_forever()

2. Создаем unit-файл: sudo nano /etc/systemd/system/my-app.service

Ini, TOML

[Unit]
Description=My Simple Python Web App
After=network.target

[Service]
Type=simple
# Запускаем от имени 'www-data' для безопасности
User=www-data
Group=www-data

# Указываем путь к нашему скрипту
ExecStart=/usr/bin/python3 /opt/my-app/app.py

# Автоматический перезапуск в случае сбоя
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

3. Запускаем и "включаем" службу:
Bash

# Перечитать конфиги, чтобы systemd увидел новый файл
sudo systemctl daemon-reload

# Запускаем службу
sudo systemctl start my-app

# Проверяем статус
sudo systemctl status my-app

# Включаем автозапуск при загрузке ОС
sudo systemctl enable my-app

Взгляд архитектора: Вы не просто "запустили скрипт". Вы декларативно описали его жизненный цикл. Теперь ОС сама следит за ним, перезапускает при сбоях (Restart=on-failure), запускает в нужном порядке (After=network.target) и от имени нужного пользователя. Это первый шаг к построению отказоустойчивых (self-healing) систем.

#linux #systemd #python #automation #devops #гайд #скрипты
👍4
AI-промпт: "Напиши и ОБЪЯСНИ мне этот RegEx"

Регулярные выражения (RegEx) — это язык, на котором 90% админов не говорят, а 10% — думают. Это чистая магия для парсинга логов, Nginx-конфигов или валидации данных. Но писать их — боль.

AI — идеальный переводчик с "человеческого" на "RegEx".

Плохой промпт: регулярка для IP-адреса Результат: \b(?:\d{1,3}\.){3}\d{1,3}\b (А почему? А 256.999.1.1 подойдет?)

Архитектурный промпт (для ChatGPT/Gemini/Copilot):

Выступи в роли эксперта по RegEx и инженера по парсингу логов.
Мне нужен RegEx-паттерн, который находит и извлекает (captures) IPv4-адреса.

Требования:
1. Паттерн должен валидировать каждый октет (от 0 до 255).
2. Он НЕ должен находить невалидные адреса (например, 999.999.999.999).

Формат ответа:
1. Паттерн: [Сам RegEx-паттерн]
2. Объяснение: Предоставь построчное объяснение, что делает каждая группа и каждый символ в паттерне (`\b`, `(?:`, `(25[0-5]|... )` и т.д.).
3. Пример для `grep`: Как использовать этот паттерн с `grep -E`.
4. Пример для `Python`: Как использовать этот паттерн в Python-скрипте.

Взгляд архитектора: AI не просто дал вам "рыбу". Он научил вас. Вы получили не просто RegEx, а полную документацию к нему. Архитектор не использует "черные ящики", которые он скопировал со Stack Overflow. Он понимает, как работает каждый компонент его системы, даже если это RegEx, сгенерированный AI.

#ai4admin #regex #bash #python #automation #промпты #sre
❤2
🤖 Python-скрипт: Проверяем сроки действия SSL-сертификатов

Забыть продлить SSL — классический факап, после которого "лежит" прод. Давайте автоматизируем проверку.

Этот скрипт проверяет список доменов и пишет в Telegram, если сертификат истекает меньше чем через 7 дней.

Код (ssl_checker.py):

import ssl
import socket
import datetime
import requests

# Настройки
DOMAINS = ['google.com', 'yoursite.ru']
TG_TOKEN = 'ВАШ_ТОКЕН_БОТА'
CHAT_ID = 'ВАШ_CHAT_ID'
DAYS_ALERT = 7

def send_tg(message):
url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage"
requests.post(url, data={"chat_id": CHAT_ID, "text": message})

def check_ssl(domain):
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain)
conn.connect((domain, 443))
cert = conn.getpeercert()

expire_date = datetime.datetime.strptime(cert['notAfter'], r"%b %d %H:%M:%S %Y %Z")
days_left = (expire_date - datetime.datetime.now()).days

if days_left < DAYS_ALERT:
return f"⚠️ {domain}: осталось {days_left} дн!"
return None

report = []
for d in DOMAINS:
try:
res = check_ssl(d)
if res: report.append(res)
except Exception as e:
report.append(f"❌ Ошибка {d}: {str(e)}")

if report:
send_tg("\n".join(report))

Как запустить:
* Получите токен у @BotFather.
* Вставьте свои домены.
* Добавьте в Systemd Timer (как мы учили в прошлом посте 😉) или в Cron на ежедневный запуск.

Теперь вы узнаете о просроченном сертификате раньше, чем ваши пользователи.

#python #ssl #automation #scripting #ai4admin
🥴2
🐍 Python: Мгновенный веб-сервер для передачи файлов

Ситуация: Нужно срочно скачать файл с вашего компьютера на телефон или другой ноутбук в той же Wi-Fi сети. Настраивать Samba/FTP/Nginx долго. Флешку искать лень.

Если у вас установлен Python (а он есть почти везде), у вас уже есть веб-сервер.

Запуск (в папке с файлами):


# Python 3
python3 -m http.server 8000

Теперь с любого устройства в сети заходите на http://IP-ВАШЕГО-ПК:8000. Вы увидите список файлов папки. Кликаем — качаем.

Чтобы остановить: `Ctrl+C` . Просто, гениально и работает везде (Linux, Windows, macOS).

#python #network #lifehack #webserver #cli #sharing
🔥5👍2❤1
🐍 Python 3.15 вышел: UTF-8 по умолчанию может сломать ваши скрипты на Windows

Коллеги, важный релиз для всех, кто пишет скрипты автоматизации, интеграции и парсеры системных логов на Python.

📌 ФАКТЫ
Стабильный релиз: 9 октября представлена финальная ветка Python 3.15.

UTF-8 Mode по умолчанию (PEP 686): встроенная функция open() без явного параметра encoding теперь всегда открывает файлы в кодировке UTF-8, игнорируя региональные параметры операционной системы (locale.getencoding()).

Ленивые импорты (PEP 810): синтаксис вида lazy import json — модуль парсится и загружается в память только при первом фактическом вызове атрибута (включается строго явно флагом или директивой). Существенно срезает время холодного старта CLI-утилит.

Экспериментальный JIT: прирост производительности +7–8% на архитектуре x86_64 под Linux.

Сэмплирующий профилировщик Tachyon: низкоуровневый профилировщик без остановки рантайма. Умеет аттачиться к уже запущенному production-процессу и строить flame graph узких мест.

Новые базовые типы: добавлены нативные frozendict (неизменяемый словарь) и sentinel (удобные уникальные маркеры-заглушки вместо object()).

⚠️ ГДЕ ВЫСТРЕЛИТ НА WINDOWS
Исторически на русскоязычных Windows-серверах и рабочих станциях open() по умолчанию поднимал кодировку CP1251 (ANSI) для файлов и CP866 (OEM) для консольных утилит.

После обновления интерпретатора до 3.15:

Выгрузки отчетов, реестров и прайсов из 1С:Предприятия;

Экспортированные CSV-таблицы из классического Excel;

Текстовые журналы старых служб, конфиги и .bat/.cmd скрипты в кодировке ANSI

при попытке прочитать их «по старинке» (open('file.txt')) мгновенно уронят процесс с ошибкой UnicodeDecodeError: 'utf-8' codec can't decode byte... либо тихо запишут кракозябры при сохранении.

🛠 КАК ПРАВИЛЬНО ОБРАБАТЫВАТЬ КОДИРОВКИ
1. Явная фиксация кодировки в Python
Python
# Чтение локальных Windows-выгрузок (1С, Excel, старые сервисы)
with open('export_1c.csv', mode='r', encoding='cp1251') as f:
data = f.read()

# Корректный перехват stdout системных CLI-команд Windows (ipconfig, ping, netstat)
import subprocess

res = subprocess.run(
['ipconfig', '/all'],
capture_output=True,
encoding='cp866',
check=True
)
print(res.stdout)

2. Временный откат поведения через переменные окружения
PowerShell
# Принудительное отключение UTF-8 режима для конкретного сеанса PowerShell
$env:PYTHONUTF8 = '0'
python automation_script.py

3. Экспресс-аудит репозитория скриптов перед обновлением Python
Bash
# Ищем потенциально опасные вызовы open() без аргумента encoding в проекте
grep -rnE "open\([^)]*\)" --include="*.py" . | grep -v "encoding="

💡 В ЧЁМ СУТЬ
Явный параметр

encoding=
в каждом вызове

open()
— базовый стандарт инженерной гигиены, делающий скрипт полностью переносимым между Windows Server, Debian/Ubuntu и любыми версиями рантайма.

Перед тем как обновлять глобальный Python на серверах автоматизации или в контейнерах сборщиков, прогоните аудит кода регуляркой выше.

#skills #python #automation #windows #1c #linux #devops #sysadmin #admin_future