Как использовать Python для базового администрирования Linux и сетевых задач

Содержание
- Что такое Python?
- Установка Python в Linux
- Работа с модулем os
- Сетевые операции с модулем socket
- Подключение к SSH и выполнение команд через Paramiko
- Когда это не сработает
- Альтернативные подходы
- Мини‑методология автоматизации
- Чек‑лист по ролям
- Безопасность и лучшие практики
- Критерии приёмки
- Часто задаваемые вопросы
- Итог
Что такое Python?
Python — это универсальный язык программирования с простым синтаксисом и богатой экосистемой библиотек. Определение в одну строку: высокоуровневый, динамически типизированный язык для автоматизации, анализа данных и веб‑разработки.
Установка Python в Linux
Многие дистрибутивы Linux поставляются с Python по умолчанию. Чтобы проверить наличие Python 3, запустите:
python3 --version
Если Python не установлен, на Ubuntu/Debian можно установить его так:
sudo apt update && sudo apt upgrade -y
sudo apt install python3.10Альтернативно, Python можно скачать в виде архива .tgz или .xz и собрать из исходников.
Работа с модулем os
Модуль os входит в стандартную библиотеку Python и служит для работы с файловой системой, средой и вызова системных команд. Краткое определение: модуль стандартной библиотеки для взаимодействия с ОС.
Ниже — исправленные и аккуратно оформленные примеры.
Создание каталога:
# Импорт модуля os
import os
# Имя нового каталога
dir_name = "example"
try:
# Создаёт новый каталог
os.mkdir(dir_name)
print(f"Каталог '{dir_name}' успешно создан")
except FileExistsError:
print(f"Каталог '{dir_name}' уже существует")
except Exception as e:
print(f"Ошибка: {e}")
Удаление каталога:
import os
# Имя каталога для удаления
dir_name = "example"
try:
os.rmdir(dir_name)
print(f"Каталог '{dir_name}' удалён")
except FileNotFoundError:
print(f"Каталог '{dir_name}' не найден")
except OSError as e:
print(f"Не удалось удалить каталог: {e}")Переименование файла или каталога:
import os
current_name = "example"
new_name = "example2.0"
try:
os.rename(current_name, new_name)
print(f"'{current_name}' переименован в '{new_name}'")
except FileNotFoundError:
print(f"'{current_name}' не найден")
except Exception as e:
print(f"Ошибка: {e}")Удаление файла:
import os
file_name = "example.txt"
try:
os.remove(file_name)
print(f"Файл '{file_name}' удалён")
except FileNotFoundError:
print(f"Файл '{file_name}' не найден")
except Exception as e:
print(f"Ошибка: {e}")Получение текущей рабочей директории и списка файлов:
import os
try:
cwd = os.getcwd()
print(cwd)
content = os.listdir('.') # содержимое текущей директории
print(content)
except Exception as e:
print(f"Ошибка: {e}")
Определение текущего пользователя:
import os
try:
user = os.getlogin()
print(user)
except Exception as e:
print(f"Ошибка: {e}")Запуск shell‑команд (внимание к безопасности):
import os
command = "sudo apt update && sudo apt upgrade -y"
try:
result = os.system(command)
print(f"Код возврата: {result}")
except Exception as e:
print(f"Ошибка при выполнении команды: {e}")Важно: os.system возвращает код завершения процесса. Для более гибкого управления вводом/выводом предпочтительнее использовать subprocess.

Сетевые операции с модулем socket
Модуль socket предназначен для сетевого взаимодействия на низком уровне: создание серверов, клиентов, проверки DNS и адресов. Кратко: стандартный модуль для сокетов и простых сетевых проверок.
Получение хоста и IP адреса локальной машины:
import socket
try:
host = socket.gethostname()
ip = socket.gethostbyname(host)
print(f"IP адрес: {ip}")
print(f"Имя хоста: {host}")
except Exception as e:
print(f"Ошибка: {e}")Проверка IP домена:
import socket
try:
domain = "duckduckgo.com"
ip = socket.gethostbyname(domain)
print(f"IP адрес {domain}: {ip}")
except Exception as e:
print(f"Ошибка: {e}")Используйте socket для простых диагностики: проверка доступности порта, быстрый TCP‑сканер или DNS‑lookup.
Подключение по SSH и выполнение команд через Paramiko
Paramiko — это библиотека для SSH в Python. Она полезна для автоматизации входа и выполнения команд на удалённых Unix‑машинах.
Установка:
pip3 install paramiko
Пример использования (с учётом безопасности):
import paramiko
ip = '127.0.0.1'
port = 22
user = 'example'
password = 'example'
command = 'uname -a'
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=port, username=user, password=password)
stdin, stdout, stderr = ssh.exec_command(command)
print(stdout.read().decode())
ssh.close()
except Exception as e:
print(f"Ошибка SSH: {e}")Важно: по возможности используйте аутентификацию ключами, а не пароли.
Примечание: при сетевых проблемах полезно запускать traceroute и диагностировать маршруты.
Когда это не сработает
- Удалённая система не поддерживает SSH или использует нестандартные политики аутентификации.
- Скрипт запускает команды с правами root без должной проверки — это риск и может быть запрещено политиками безопасности.
- Для крупномасштабной конфигурации и оркестрации ручные скрипты обычно уступают инструментам уровня инфраструктуры (см. раздел «Альтернативы»).
Альтернативные подходы
- Ansible — декларативная конфигурация и управление на базе SSH (хорош для массовых задач).
- Fabric — высокоуровневый инструмент для удалённых команд и деплоя на Python.
- Salt / Puppet / Chef — для более сложной оркестрации и состояния инфраструктуры.
- Использование systemd timers и cron для расписаний, если требуется простая периодичность.
Мини‑методология автоматизации (шаги)
- Определите повторяемую задачу и критерий успеха.
- Напишите минимальный скрипт для локальной проверки (idempotent по возможности).
- Логируйте действия и ошибки в файл.
- Проведите тест в изолированной среде (контейнер/VM).
- Переведите в планировщик (cron/systemd) или интегрируйте в CI/CD.
- Документируйте и добавьте тесты приёмки.
Чек‑лист по ролям
Для сисадмина:
- Проверить доступы и права на выполнение скрипта.
- Настроить ротацию логов.
- Использовать виртуальные окружения (venv) для библиотек.
Для DevOps инженера:
- Интеграция с CI/CD.
- Проверка на совместимость версий Python.
- Управление секретами через Vault/Secrets Manager.
Для разработчика инструмента:
- Обеспечить idempotence команд.
- Написать тесты и документацию.
Безопасность и лучшие практики
- Не храните пароли в коде. Используйте ключи SSH и агент ssh‑agent или менеджеры секретов.
- Приведите права до минимально необходимых (least privilege).
- Ведение логов: логируйте события, но не записывайте секреты в лог.
- Валидируйте входные данные перед передачей в shell. Предпочитайте subprocess.run с массивом аргументов вместо форматированной строки.
- Ограничьте использование sudo в автоматических задачах и документируйте причины.
Критерии приёмки
- Скрипт выполняет задачу без ручного вмешательства на тестовой машине.
- Код возвращает предсказуемые коды завершения и пишет логи.
- Нет утечек секретов в логах или репозиториях.
- Прохождение smoke‑теста: проверка состояния после выполнения (файлы, службы, конфигурация).
Часто задаваемые вопросы
1. Нужен ли Python 3 для этих библиотек?
Рекомендуется Python 3. Многие примеры и зависимости ориентированы на Python 3. Python 2 устарел и не поддерживается.
2. Нужно ли устанавливать os и socket?
Нет. os и socket входят в стандартную библиотеку Python и устанавливаются вместе с интерпретатором.
3. Можно ли использовать Paramiko для входа в Windows?
Paramiko реализует SSH‑протокол для Unix‑подобных систем; подключение к Windows через SSH возможно, если на Windows настроен OpenSSH‑сервер, но некоторые функции и команды будут отличаться.
Итог
Python — мощный инструмент для автоматизации рутинных задач на Linux. Для единичных операций и быстрой диагностики подходят os и socket. Для удалённого выполнения команд используйте Paramiko, но для масштабируемого управления инфраструктурой задумайтесь о Ansible или похожих решениях. Всегда следуйте принципам безопасности и тестируйте скрипты в изолированной среде.
Важно: перед автоматизацией критичных изменений убедитесь, что у вас есть резервные копии и план отката.
Похожие материалы
Восстановление кэша значков в Windows
Стрелки не работают в Excel — быстрое решение
Шифрование USB‑накопителя с VeraCrypt
PowerShell: история команд — просмотр и сохранение
Nandroid — полная резервная копия Android