9.1 Сетевая диагностика
Сетевые утилиты помогают диагностировать проблемы с подключением и анализировать сетевой трафик.
ping — проверка доступности
ping google.com # проверить доступность сайта
ping -c 4 8.8.8.8 # отправить 4 пакета
ping -i 2 google.com # интервал между пакетами 2 сек
ping -t 64 google.com # TTL пакетов 64
traceroute — трассировка маршрута
traceroute google.com # показать маршрут до сервера
traceroute -n google.com # не разрешать имена хостов
traceroute -m 10 google.com # максимум 10 прыжков
mtr — комбинация ping и traceroute
mtr google.com # запустить mtr
mtr -r -c 10 google.com # 10 циклов и завершить
mtr -n google.com # не разрешать имена
nslookup — разрешение DNS
nslookup google.com # найти IP адрес
nslookup 8.8.8.8 # обратный поиск (IP -> имя)
nslookup -type=MX google.com # найти MX записи
dig — расширенный DNS запрос
dig google.com # подробная информация о DNS
dig @8.8.8.8 google.com # использовать конкретный DNS сервер
dig -x 8.8.8.8 # обратный DNS запрос
Интерпретация ping:
•
•
•
•
time=
— время отклика в миллисекундах•
ttl=
— время жизни пакета•
packet loss
— процент потерянных пакетов
9.2 Просмотр сетевых соединений
Команды для просмотра активных сетевых соединений и анализа сетевого трафика.
ss — современная замена netstat
ss -tuln # все TCP и UDP соединения
ss -tulnp # с процессами
ss -tuln | grep :80 # найти соединения на порту 80
ss -tuln | grep LISTEN # только слушающие порты
netstat — классическая команда
netstat -tuln # все TCP и UDP соединения
netstat -tulnp # с процессами
netstat -r # таблица маршрутизации
netstat -i # статистика интерфейсов
lsof — список открытых файлов
lsof -i # все сетевые соединения
lsof -i :80 # соединения на порту 80
lsof -i tcp # только TCP соединения
lsof -i udp # только UDP соединения
iftop — мониторинг трафика
sudo iftop # мониторинг трафика в реальном времени
sudo iftop -i eth0 # конкретный интерфейс
sudo iftop -n # не разрешать имена хостов
nethogs — трафик по процессам
sudo nethogs # трафик по процессам
sudo nethogs eth0 # конкретный интерфейс
Расшифровка состояний TCP:
•
•
•
•
•
LISTEN
— ожидает подключения•
ESTABLISHED
— установленное соединение•
CLOSE_WAIT
— ожидает закрытия•
TIME_WAIT
— временное ожидание
9.3 Скачивание файлов
wget и curl — основные инструменты для скачивания файлов из интернета.
wget — простой загрузчик
wget https://example.com/file.zip # скачать файл
wget -O filename.zip https://example.com/file.zip # сохранить с другим именем
wget -c https://example.com/file.zip # продолжить загрузку
wget -r https://example.com/ # рекурсивно скачать сайт
curl — универсальный инструмент
curl https://example.com/file.zip # скачать файл
curl -O https://example.com/file.zip # сохранить с оригинальным именем
curl -L https://example.com/redirect # следовать редиректам
curl -C - https://example.com/file.zip # продолжить загрузку
HTTP запросы с curl
curl -X GET https://api.example.com/data # GET запрос
curl -X POST -d "data=value" https://api.example.com # POST запрос
curl -H "Authorization: Bearer token" https://api.example.com # с заголовками
curl -v https://example.com # подробный вывод
Пакетная загрузка
# Создать список URL для загрузки
echo "https://example.com/file1.zip" > urls.txt
echo "https://example.com/file2.zip" >> urls.txt
# Загрузить все файлы
wget -i urls.txt
Ограничение скорости
wget --limit-rate=1m https://example.com/file.zip # ограничить скорость
curl --limit-rate 1m https://example.com/file.zip # ограничить скорость
Выбор между wget и curl:
• wget — лучше для простого скачивания файлов
• curl — лучше для API запросов и сложных операций
• wget — лучше для простого скачивания файлов
• curl — лучше для API запросов и сложных операций
9.4 SSH подключение
SSH (Secure Shell) — протокол для безопасного удаленного доступа к серверам.
Базовое подключение
ssh user@hostname # подключиться к серверу
ssh user@192.168.1.100 # подключиться по IP
ssh -p 2222 user@hostname # подключиться на нестандартном порту
Первый вход
# При первом подключении система спросит:
# The authenticity of host 'hostname' can't be established.
# Are you sure you want to continue connecting (yes/no)?
# Введите 'yes' для продолжения
Выполнение команд на удаленном сервере
ssh user@hostname "ls -la" # выполнить команду и выйти
ssh user@hostname "uptime && who" # выполнить несколько команд
Туннелирование портов
ssh -L 8080:localhost:80 user@hostname # локальный туннель
ssh -R 8080:localhost:80 user@hostname # удаленный туннель
Передача файлов через SSH
scp file.txt user@hostname:/home/user/ # скопировать файл на сервер
scp user@hostname:/home/user/file.txt . # скопировать файл с сервера
scp -r directory/ user@hostname:/home/user/ # скопировать каталог
Настройка SSH клиента
# Создать файл ~/.ssh/config
Host myserver
HostName 192.168.1.100
User myuser
Port 22
IdentityFile ~/.ssh/id_rsa
# Теперь можно подключаться просто:
ssh myserver
Безопасность SSH: Всегда используйте ключи вместо паролей для аутентификации. Отключите root login и используйте нестандартные порты.
9.5 Аутентификация по ключам
SSH ключи обеспечивают более безопасную аутентификацию, чем пароли.
Генерация SSH ключа
ssh-keygen -t rsa -b 4096 # создать RSA ключ
ssh-keygen -t ed25519 # создать Ed25519 ключ (рекомендуется)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # с комментарием
Процесс генерации
# Система спросит:
# Enter file in which to save the key (/home/user/.ssh/id_rsa): [Enter]
# Enter passphrase (empty for no passphrase): [введите пароль или Enter]
# Enter same passphrase again: [повторите пароль]
Копирование ключа на сервер
ssh-copy-id user@hostname # автоматически скопировать ключ
# Или вручную:
cat ~/.ssh/id_rsa.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Проверка подключения
ssh user@hostname # подключиться без пароля
ssh -i ~/.ssh/id_rsa user@hostname # использовать конкретный ключ
Управление ключами
ssh-add ~/.ssh/id_rsa # добавить ключ в ssh-agent
ssh-add -l # показать загруженные ключи
ssh-add -D # удалить все ключи из ssh-agent
Настройка ssh-agent
# Добавить в ~/.bashrc или ~/.profile:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
Типы ключей:
• RSA — классический, совместимый
• Ed25519 — современный, быстрый, безопасный
• ECDSA — компактный, быстрый
• RSA — классический, совместимый
• Ed25519 — современный, быстрый, безопасный
• ECDSA — компактный, быстрый
9.6 Передача файлов
Различные способы передачи файлов между компьютерами в Linux.
scp — копирование через SSH
# Копирование файла на сервер
scp file.txt user@hostname:/home/user/
scp -r directory/ user@hostname:/home/user/
# Копирование файла с сервера
scp user@hostname:/home/user/file.txt .
scp -r user@hostname:/home/user/directory/ .
# Копирование между серверами
scp user1@host1:/path/file user2@host2:/path/
rsync — синхронизация файлов
rsync -avz file.txt user@hostname:/home/user/ # синхронизировать файл
rsync -avz --delete local/ user@hostname:/home/user/ # синхронизировать каталог
rsync -avz --progress user@hostname:/home/user/ . # с прогрессом
sftp — интерактивная передача
sftp user@hostname # подключиться к SFTP серверу
# Команды SFTP:
# put file.txt # загрузить файл
# get file.txt # скачать файл
# ls # список файлов
# cd directory # смена каталога
# quit # выход
wget/curl для загрузки
wget https://example.com/file.zip
curl -O https://example.com/file.zip
curl -L -o file.zip https://example.com/file.zip
Создание архива перед передачей
tar -czf archive.tar.gz directory/ # создать архив
scp archive.tar.gz user@hostname:/home/user/
ssh user@hostname "cd /home/user && tar -xzf archive.tar.gz"
Практический пример резервного копирования
#!/bin/bash
# Скрипт резервного копирования на удаленный сервер
BACKUP_DIR="/home/user/backup"
REMOTE_USER="backup"
REMOTE_HOST="backup-server.com"
REMOTE_DIR="/backups"
# Создать архив
tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz" /home/user/documents/
# Передать на сервер
scp "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
# Удалить локальный архив
rm "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz"
Выбор инструмента:
• scp — простые операции копирования
• rsync — синхронизация и инкрементальные копии
• sftp — интерактивная работа с файлами
• wget/curl — загрузка из интернета
• scp — простые операции копирования
• rsync — синхронизация и инкрементальные копии
• sftp — интерактивная работа с файлами
• wget/curl — загрузка из интернета