Python упрощает управление конфигурациями серверов. С помощью библиотеки paramiko вы можете подключаться к удалённым машинам через SSH и выполнять команды. Например, автоматизируйте обновление пакетов на нескольких серверах: напишите скрипт, который последовательно подключается к каждому устройству и запускает apt-get update && apt-get upgrade -y.
Для работы с логами и анализа данных используйте модуль re для поиска по регулярным выражениям. Например, создайте скрипт, который извлекает из логов все ошибки и сохраняет их в отдельный файл. Это поможет быстро находить и устранять проблемы в системе.
Python также полезен для автоматизации резервного копирования. Напишите скрипт, который копирует важные файлы на внешний носитель или в облачное хранилище. Используйте модуль shutil для работы с файлами и schedule для запуска задачи по расписанию.
Сочетание Python и Linux открывает широкие возможности для системных администраторов. Начните с малого: автоматизируйте одну задачу, а затем постепенно расширяйте функциональность своих скриптов. Это сэкономит время и сделает управление инфраструктурой более удобным.
Автоматизация задач администрирования с помощью Python
Используйте модуль subprocess
для выполнения команд оболочки прямо из Python-скриптов. Например, чтобы проверить доступность сервера, запустите команду ping
:
import subprocess
result = subprocess.run(['ping', '-c', '4', 'example.com'], capture_output=True, text=True)
print(result.stdout)
Для работы с файловой системой применяйте модуль os
. Создайте скрипт, который автоматически очищает старые логи:
import os
import time
log_dir = '/var/log'
days_old = 7
for file in os.listdir(log_dir):
file_path = os.path.join(log_dir, file)
if os.path.isfile(file_path) and time.time() - os.path.getmtime(file_path) > days_old * 86400:
os.remove(file_path)
Упростите управление пользователями с помощью модуля pwd
и spwd
. Например, создайте скрипт для добавления нового пользователя:
import subprocess
username = 'newuser'
password = 'password123'
subprocess.run(['sudo', 'useradd', '-m', username])
subprocess.run(['sudo', 'passwd', username], input=f'{password}
{password}
', text=True)
Для мониторинга системы используйте модуль psutil
. Он позволяет собирать данные о загрузке процессора, памяти и диска:
import psutil
cpu_usage = psutil.cpu_percent(interval=1)
memory_info = psutil.virtual_memory()
disk_usage = psutil.disk_usage('/')
print(f'CPU: {cpu_usage}%')
print(f'Memory: {memory_info.percent}% used')
print(f'Disk: {disk_usage.percent}% used')
Автоматизируйте резервное копирование с помощью модуля shutil
. Создайте скрипт, который копирует важные данные в указанную директорию:
import shutil
import datetime
source_dir = '/etc'
backup_dir = f'/backups/{datetime.date.today()}'
shutil.copytree(source_dir, backup_dir)
Используйте модуль paramiko
для удаленного управления серверами через SSH. Например, выполните команду на удаленном хосте:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('remote_host', username='user', password='password')
stdin, stdout, stderr = ssh.exec_command('uptime')
print(stdout.read().decode())
ssh.close()
Для работы с конфигурационными файлами в формате YAML или JSON используйте модули yaml
и json
. Например, прочитайте конфигурацию из файла:
import yaml
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
print(config['server']['hostname'])
Создавайте cron-задачи программно с помощью модуля croniter
. Например, добавьте задачу для ежедневного запуска скрипта:
import croniter
import subprocess
cron = croniter.croniter('0 0 * * *')
next_run = cron.get_next()
subprocess.run(['crontab', '-l'], stdout=subprocess.PIPE)
subprocess.run(['echo', '0 0 * * * /path/to/script.py', '|', 'crontab', '-'])
Эти примеры помогут вам начать автоматизацию рутинных задач администрирования, сэкономив время и уменьшив вероятность ошибок.
Скрипты для резервного копирования данных
Используйте Python для создания простых и надежных скриптов резервного копирования. Начните с модуля shutil
, который позволяет копировать файлы и директории. Например, для копирования папки:
import shutil
shutil.copytree('/путь/к/исходной/папке', '/путь/к/резервной/папке')
Для архивирования данных добавьте модуль tarfile
. Это позволит сжимать резервные копии и экономить место на диске:
import tarfile
with tarfile.open('/путь/к/архиву.tar.gz', 'w:gz') as tar:
tar.add('/путь/к/папке', arcname='имя_папки')
Автоматизируйте процесс с помощью планировщика задач cron
. Добавьте задачу в crontab для ежедневного выполнения скрипта:
0 2 * * * /usr/bin/python3 /путь/к/скрипту.py
Для проверки целостности резервных копий используйте хеширование. Модуль hashlib
поможет создать контрольную сумму файла:
import hashlib
def calculate_hash(file_path):
hasher = hashlib.md5()
with open(file_path, 'rb') as f:
buf = f.read()
hasher.update(buf)
return hasher.hexdigest()
Храните несколько версий резервных копий. Добавьте в скрипт логику удаления старых архивов:
import os
import glob
backups = glob.glob('/путь/к/архивам/*.tar.gz')
backups.sort()
if len(backups) > 5:
for old_backup in backups[:-5]:
os.remove(old_backup)
Для уведомлений о завершении резервного копирования используйте модуль smtplib
:
import smtplib
def send_email(subject, message):
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login('user@example.com', 'пароль')
server.sendmail('user@example.com', 'admin@example.com', f'Subject: {subject}
{message}')
server.quit()
Тестируйте скрипты на тестовых данных перед использованием в рабочей среде. Это поможет избежать потери данных и убедиться в корректности работы.
Мониторинг системных ресурсов и служб
Для мониторинга загрузки процессора, памяти и дисков в реальном времени используйте библиотеку psutil
. Установите её через pip install psutil
и создайте скрипт, который собирает данные каждые несколько секунд. Например, для получения текущей загрузки CPU и памяти:
import psutil
cpu_usage = psutil.cpu_percent(interval=1)
memory_usage = psutil.virtual_memory().percent
print(f"CPU: {cpu_usage}%, Memory: {memory_usage}%")
Чтобы отслеживать состояние служб, используйте модуль subprocess
. Создайте функцию, которая проверяет статус службы через команду systemctl
. Например, для проверки состояния сервиса nginx
:
import subprocess
def check_service_status(service_name):
result = subprocess.run(['systemctl', 'is-active', service_name], capture_output=True, text=True)
return result.stdout.strip()
status = check_service_status('nginx')
print(f"nginx status: {status}")
Для автоматизации уведомлений о превышении пороговых значений ресурсов подключите библиотеку smtplib
. Настройте отправку email при достижении, например, 90% использования памяти:
import smtplib
from email.mime.text import MIMEText
def send_alert(message):
msg = MIMEText(message)
msg['Subject'] = 'Resource Alert'
msg['From'] = 'admin@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com') as server:
server.send_message(msg)
if memory_usage > 90:
send_alert(f"Memory usage is at {memory_usage}%")
Для более глубокого анализа данных сохраняйте их в файл или базу данных. Используйте модуль sqlite3
для записи метрик в локальную базу:
import sqlite3
from datetime import datetime
conn = sqlite3.connect('metrics.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS metrics (timestamp TEXT, cpu REAL, memory REAL)')
timestamp = datetime.now().isoformat()
cursor.execute('INSERT INTO metrics VALUES (?, ?, ?)', (timestamp, cpu_usage, memory_usage))
conn.commit()
conn.close()
Создайте графики на основе собранных данных с помощью библиотеки matplotlib
. Это поможет визуализировать тренды и быстро выявить аномалии:
import matplotlib.pyplot as plt
import sqlite3
conn = sqlite3.connect('metrics.db')
cursor = conn.cursor()
cursor.execute('SELECT timestamp, cpu FROM metrics')
data = cursor.fetchall()
timestamps = [row[0] for row in data]
cpu_values = [row[1] for row in data]
plt.plot(timestamps, cpu_values)
plt.xlabel('Time')
plt.ylabel('CPU Usage (%)')
plt.show()
Эти инструменты позволяют эффективно отслеживать состояние системы и своевременно реагировать на возникающие проблемы.
Планирование задач с использованием cron и Python
Для автоматизации повторяющихся задач на Linux используйте cron вместе с Python. Cron позволяет запускать скрипты по расписанию, а Python упрощает их создание и поддержку. Начните с редактирования crontab: выполните команду crontab -e
, чтобы открыть файл расписания.
Добавьте строку в формате * * * * * /usr/bin/python3 /путь/к/скрипту.py
. Первые пять звёзд задают время выполнения: минута, час, день месяца, месяц, день недели. Например, 0 3 * * *
запустит скрипт каждый день в 3:00 утра.
Для сложных задач создайте Python-скрипт, который выполнит всю работу. Используйте библиотеку subprocess
для выполнения команд Linux, os
для работы с файловой системой и logging
для записи логов. Например, скрипт может автоматически создавать резервные копии или очищать старые файлы.
Проверьте права доступа к скрипту: убедитесь, что он исполняемый (chmod +x /путь/к/скрипту.py
). Также укажите полный путь к интерпретатору Python в первой строке скрипта (#!/usr/bin/env python3
), чтобы cron мог его найти.
Если задача требует сложной логики, используйте Python для её реализации, а cron – для запуска. Например, скрипт может проверять состояние сервера и отправлять уведомления, если что-то идёт не так. Это сочетание инструментов делает управление системой гибким и удобным.
Интеграция Python с инструментами системного администрирования
Используйте модуль subprocess
для выполнения команд Linux прямо из Python. Например, чтобы проверить состояние диска, вызовите команду df -h
:
import subprocess
result = subprocess.run(['df', '-h'], stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))
Для работы с конфигурационными файлами подключите библиотеку configparser
. Она упрощает чтение и изменение настроек в формате INI. Например, обновите параметр в файле /etc/ssh/sshd_config
:
import configparser
config = configparser.ConfigParser()
config.read('/etc/ssh/sshd_config')
config.set('SectionName', 'Port', '2222')
with open('/etc/ssh/sshd_config', 'w') as configfile:
config.write(configfile)
Автоматизируйте мониторинг системы с помощью psutil
. Этот модуль предоставляет доступ к данным о процессорах, памяти, дисках и сети. Например, отслеживайте использование памяти:
import psutil
memory = psutil.virtual_memory()
print(f"Используется {memory.percent}% памяти")
Для управления пакетами через Python используйте apt
или yum
API. Например, установите пакет с помощью apt
:
import apt
cache = apt.Cache()
if cache['nginx'].is_installed:
print("Nginx уже установлен")
else:
cache['nginx'].mark_install()
cache.commit()
Интегрируйте Python с Ansible для автоматизации конфигурации. Создайте плейбук и вызовите его через Python:
import subprocess
subprocess.run(['ansible-playbook', 'deploy.yml'])
Используйте fabric
для удаленного выполнения задач на нескольких серверах. Например, перезагрузите серверы из списка:
from fabric import Connection
hosts = ['server1', 'server2']
for host in hosts:
with Connection(host) as conn:
conn.run('sudo reboot')
Создавайте отчеты о состоянии системы с помощью pandas
. Соберите данные в DataFrame и экспортируйте их в CSV:
import pandas as pd
data = {'CPU': [psutil.cpu_percent()], 'Memory': [psutil.virtual_memory().percent]}
df = pd.DataFrame(data)
df.to_csv('system_report.csv', index=False)
import logging
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(message)s')
logging.info('Система запущена')
Используйте paramiko
для SSH-подключений. Например, выполните команду на удаленном сервере:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()
Создавайте графики и визуализации с помощью matplotlib
. Например, постройте график загрузки CPU:
import matplotlib.pyplot as plt
cpu_usage = [psutil.cpu_percent() for _ in range(10)]
plt.plot(cpu_usage)
plt.ylabel('Загрузка CPU (%)')
plt.savefig('cpu_usage.png')
Для работы с базами данных подключите sqlite3
или psycopg2
. Например, создайте таблицу в SQLite:
import sqlite3
conn = sqlite3.connect('system.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY, message TEXT)')
conn.commit()
conn.close()
Используйте os
и shutil
для управления файлами и каталогами. Например, создайте резервную копию каталога:
import shutil
shutil.copytree('/etc', '/backup/etc_backup')
Создавайте скрипты для автоматизации задач cron. Например, запускайте Python-скрипт каждую минуту:
* * * * * /usr/bin/python3 /path/to/script.py
Для работы с API используйте requests
. Например, получите данные с внешнего сервиса:
import requests
response = requests.get('https://api.example.com/data')
print(response.json())
Используйте smtplib
для отправки уведомлений по почте. Например, отправьте отчет о состоянии системы:
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('Система работает стабильно')
msg['Subject'] = 'Отчет о состоянии системы'
msg['From'] = 'admin@example.com'
msg['To'] = 'user@example.com'
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
Для работы с виртуализацией подключите libvirt
. Например, получите список запущенных виртуальных машин:
import libvirt
conn = libvirt.open('qemu:///system')
domains = conn.listAllDomains()
for domain in domains:
print(domain.name())
conn.close()
Используйте pyinotify
для мониторинга изменений в файловой системе. Например, отслеживайте изменения в каталоге /var/log
:
import pyinotify
class EventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print(f"Файл {event.pathname} изменен")
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, EventHandler())
wm.add_watch('/var/log', pyinotify.IN_MODIFY)
notifier.loop()
Создавайте простые веб-интерфейсы с помощью flask
. Например, отобразите состояние системы на веб-странице:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def status():
return f"Загрузка CPU: {psutil.cpu_percent()}%"
app.run(host='0.0.0.0', port=5000)
Используйте pyudev
для работы с устройствами Linux. Например, получите информацию о подключенных USB-устройствах:
import pyudev
context = pyudev.Context()
for device in context.list_devices(subsystem='usb'):
print(device.device_node, device.get('ID_MODEL'))
Для работы с сетью подключите socket
. Например, проверьте доступность порта на удаленном сервере:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('example.com', 80))
if result == 0:
print("Порт 80 доступен")
sock.close()
Используйте pytest
для тестирования скриптов. Например, проверьте корректность работы функции:
def test_cpu_usage():
assert psutil.cpu_percent() < 100
Создавайте интерактивные CLI-интерфейсы с помощью argparse
. Например, добавьте параметры для скрипта:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--port', type=int, default=8080)
args = parser.parse_args()
print(f"Порт: {args.port}")
Для работы с временем и датами используйте datetime
. Например, запишите время выполнения задачи:
from datetime import datetime
start_time = datetime.now()
# Выполнение задачи
end_time = datetime.now()
print(f"Задача выполнена за {end_time - start_time}")
Используйте pywinrm
для управления Windows-серверами из Linux. Например, выполните команду на удаленном сервере:
from winrm import Session
session = Session('windows-server', auth=('user', 'pass'))
result = session.run_cmd('ipconfig')
print(result.std_out)
Для работы с JSON подключите json
. Например, прочитайте конфигурацию из файла:
import json
with open('config.json') as f:
config = json.load(f)
print(config['hostname'])
Используйте pyodbc
для подключения к базам данных через ODBC. Например, выполните запрос к MySQL:
import pyodbc
conn = pyodbc.connect('DRIVER={MySQL};SERVER=localhost;DATABASE=test;UID=user;PWD=pass')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
for row in cursor:
print(row)
conn.close()
Для работы с XML подключите xml.etree.ElementTree
. Например, прочитайте данные из файла:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for child in root:
print(child.tag, child.attrib)
Используйте pyautogui
для автоматизации графических интерфейсов. Например, сделайте скриншот экрана:
import pyautogui
screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')
Для работы с архивами подключите zipfile
. Например, создайте ZIP-архив:
import zipfile
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')
Используйте pycrypto
для шифрования данных. Например, зашифруйте файл:
from Crypto.Cipher import AES
cipher = AES.new('This is a key123', AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(b'Secret message')
with open('encrypted.bin', 'wb') as f:
f.write(cipher.nonce + tag + ciphertext)
Для работы с изображениями подключите PIL
. Например, измените размер изображения:
from PIL import Image
img = Image.open('image.jpg')
img = img.resize((800, 600))
img.save('resized_image.jpg')
Используйте pyqt
для создания графических интерфейсов. Например, создайте простое окно:
from PyQt5.QtWidgets import QApplication, QLabel
app = QApplication([])
label = QLabel('Hello, World!')
label.show()
app.exec_()
Для работы с PDF подключите PyPDF2
. Например, объедините несколько PDF-файлов:
from PyPDF2 import PdfMerger
merger = PdfMerger()
merger.append('file1.pdf')
merger.append('file2.pdf')
merger.write('merged.pdf')
merger.close()
Используйте pygame
для создания игр и мультимедиа-приложений. Например, создайте простое окно:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Hello, Pygame!')
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
Для работы с аудио подключите pydub
. Например, измените громкость аудиофайла:
from pydub import AudioSegment
sound = AudioSegment.from_file("sound.wav")
louder_sound = sound + 10
louder_sound.export("louder_sound.wav", format="wav")
Используйте pyttsx3
для синтеза речи. Например, произнесите текст:
import pyttsx3
engine = pyttsx3.init()
engine.say('Привет, мир!')
engine.runAndWait()
Для работы с видео подключите moviepy
. Например, создайте GIF из видео:
from moviepy.editor import VideoFileClip
clip = VideoFileClip("video.mp4")
clip.write_gif("video.gif")
Используйте pywebview
для создания веб-приложений. Например, откройте веб-страницу:
import webview
webview.create_window('Пример', 'https://example.com')
webview.start()
Для работы с графиками подключите plotly
. Например, создайте интерактивный график:
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
fig.show()
Используйте pyinstaller
для создания исполняемых файлов. Например, соберите скрипт в EXE:
pyinstaller --onefile script.py
Для работы с базами данных NoSQL подключите pymongo
. Например, выполните запрос к MongoDB:
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.test_database
collection = db.test_collection
result = collection.find_one({'name': 'John'})
print(result)
Используйте pyodbc
для подключения к базам данных через ODBC. Например, выполните запрос к MySQL:
import pyodbc
conn = pyodbc.connect('DRIVER={MySQL};SERVER=localhost;DATABASE=test;UID=user;PWD=pass')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
for row in cursor:
print(row)
conn.close()
Для работы с XML подключите xml.etree.ElementTree
. Например, прочитайте данные из файла:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for child in root:
print(child.tag, child.attrib)
Используйте pyautogui
для автоматизации графических интерфейсов. Например, сделайте скриншот экрана:
import pyautogui
screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')
Для работы с архивами подключите zipfile
. Например, создайте ZIP-архив:
import zipfile
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('file1.txt')
zipf.write('file2.txt')
Используйте pycrypto
для шифрования данных. Например, зашифруйте файл:
from Crypto.Cipher import AES
cipher = AES.new('This is a key123', AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(b'Secret message')
with open('encrypted.bin', 'wb') as f:
f.write(cipher.nonce + tag + ciphertext)
Для работы с изображениями подключите PIL
. Например, измените размер изображения:
from PIL import Image
img = Image.open('image.jpg')
img = img.resize((800, 600))
img.save('resized_image.jpg')
Используйте pyqt
для создания графических интерфейсов. Например, создайте простое окно:
from PyQt5.QtWidgets import QApplication, QLabel
app = QApplication([])
label = QLabel('Hello, World!')
label.show()
app.exec_()
Для работы с PDF подключите PyPDF2
. Например, объедините несколько PDF-файлов:
from PyPDF2 import PdfMerger
merger = PdfMerger()
merger.append('file1.pdf')
merger.append('file2.pdf')
merger.write('merged.pdf')
merger.close()
Используйте pygame
для создания игр и мультимедиа-приложений. Например, создайте простое окно:
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Hello, Pygame!')
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
Для работы с аудио подключите pydub
. Например, измените громкость аудиофайла:
from pydub import AudioSegment
sound = AudioSegment.from_file("sound.wav")
louder_sound = sound + 10
louder_sound.export("louder_sound.wav", format="wav")
Используйте pyttsx3
для синтеза речи. Например, произнесите текст:
import pyttsx3
engine = pyttsx3.init()
engine.say('Привет, мир!')
engine.runAndWait()
Для работы с видео подключите moviepy
. Например, создайте GIF из видео:
from moviepy.editor import VideoFileClip
clip = VideoFileClip("video.mp4")
clip.write_gif("video.gif")
Используйте pywebview
для создания веб-приложений. Например, откройте веб-страницу:
import webview
webview.create_window('Пример', 'https://example.com')
webview.start()
Для работы с графиками подключите plotly
. Например, создайте интерактивный график:
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
fig.show()
Используйте pyinstaller
для создания исполняемых файлов. Например, соберите скрипт в EXE:
pyinstaller --onefile script.py
Для работы с базами данных NoSQL подключите pymongo
. Например, выполните запрос к MongoDB:
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.test_database
collection = db.test_collection
result = collection.find_one({'name': 'John'})
print(result)
Использование библиотеки paramiko для работы с SSH
Для работы с SSH в Python установите библиотеку paramiko с помощью команды pip install paramiko
. Она предоставляет простой интерфейс для подключения к удаленным серверам и выполнения команд.
Создайте SSH-клиент, используя paramiko.SSHClient()
. По умолчанию клиент не доверяет новым хостам, поэтому добавьте их в список известных с помощью client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
. Подключитесь к серверу, указав IP-адрес, имя пользователя и пароль:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.1.1', username='user', password='pass')
Для выполнения команд на удаленном сервере используйте метод exec_command()
. Например, чтобы проверить доступное место на диске, выполните:
stdin, stdout, stderr = client.exec_command('df -h')
print(stdout.read().decode())
Если нужно передать файл на сервер или скачать его, используйте paramiko.SFTPClient
. Откройте SF-сессию через client.open_sftp()
и загрузите файл с помощью sftp.put()
:
sftp = client.open_sftp()
sftp.put('local_file.txt', '/remote/path/file.txt')
sftp.close()
После завершения работы всегда закрывайте соединение с помощью client.close()
. Это освобождает ресурсы и предотвращает утечки.
Для повышения безопасности используйте SSH-ключи вместо паролей. Укажите путь к приватному ключу в параметре key_filename
при подключении:
client.connect('192.168.1.1', username='user', key_filename='/path/to/private_key')
Paramiko также поддерживает асинхронные операции через paramiko.Channel
, что полезно для выполнения длительных задач без блокировки основного потока программы.
Автоматизация управления пакетами с помощью subprocess
Используйте модуль subprocess
для автоматизации установки, обновления и удаления пакетов в Linux. Например, чтобы установить пакет с помощью apt
, выполните команду:
import subprocess
subprocess.run(["sudo", "apt", "install", "package_name", "-y"])
Для обновления списка пакетов и системы добавьте:
subprocess.run(["sudo", "apt", "update", "-y"])
subprocess.run(["sudo", "apt", "upgrade", "-y"])
Если нужно удалить пакет, используйте:
subprocess.run(["sudo", "apt", "remove", "package_name", "-y"])
Для работы с yum
или dnf
замените команды на соответствующие. Например, установка пакета через yum
:
subprocess.run(["sudo", "yum", "install", "package_name", "-y"])
Добавьте обработку ошибок, чтобы скрипт был устойчивым. Проверяйте код завершения команды:
result = subprocess.run(["sudo", "apt", "install", "package_name", "-y"])
if result.returncode != 0:
print("Ошибка при установке пакета")
Для удобства создайте функции, которые будут выполнять часто используемые операции. Например, функция для установки пакета:
def install_package(package_name):
result = subprocess.run(["sudo", "apt", "install", package_name, "-y"])
return result.returncode == 0
Используйте subprocess
для управления пакетами в нескольких системах одновременно. Например, подключитесь к удаленным серверам через ssh
и выполните команды.
Создание REST API для управления серверами
Для создания REST API на Python используйте библиотеку FastAPI или Flask. Эти инструменты позволяют быстро разрабатывать API с минимальным количеством кода. Установите FastAPI через pip: pip install fastapi[all]
. Для запуска сервера добавьте uvicorn
: pip install uvicorn
.
Создайте базовый эндпоинт для управления серверами. Например, для получения списка серверов используйте следующий код:
from fastapi import FastAPI
app = FastAPI()
servers = [
{"id": 1, "name": "server1", "status": "active"},
{"id": 2, "name": "server2", "status": "inactive"}
]
@app.get("/servers")
def get_servers():
return servers
Для выполнения команд на сервере добавьте эндпоинт с использованием модуля subprocess. Например, для перезагрузки сервера:
import subprocess
@app.post("/servers/{server_id}/restart")
def restart_server(server_id: int):
subprocess.run(["sudo", "systemctl", "restart", "service_name"])
return {"message": f"Server {server_id} restarted"}
Добавьте аутентификацию для защиты API. Используйте OAuth2 с JWT токенами. FastAPI поддерживает это из коробки:
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/secure")
def secure_endpoint(token: str = Depends(oauth2_scheme)):
return {"message": "Access granted"}
Тестируйте API с помощью Postman или curl. Убедитесь, что все эндпоинты работают корректно и возвращают ожидаемые результаты. Например, для проверки списка серверов выполните команду: curl http://localhost:8000/servers
.
Разверните API на сервере с использованием Nginx и Gunicorn для повышения производительности. Настройте проксирование запросов через Nginx и запустите FastAPI через Gunicorn:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
Документируйте API с помощью Swagger или ReDoc. FastAPI автоматически генерирует документацию, доступную по адресу /docs
и /redoc
.