linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Протоколы/ssh

kb/protocols ── Протоколы ── intermediate

SSH - secure shell

SSH - зашифрованный канал к удалённому хосту: shell, копирование файлов, port-forwarding. Стандартный порт 22, аутентификация по ключам или паролю.

view as markdownaka: secure-shell, sshd

Базовое подключение

bash
ssh user@host                       # по паролю или ключу из ~/.ssh
ssh -p 2222 user@host                # нестандартный порт
ssh -i ~/.ssh/special_key user@host  # конкретный приватный ключ
ssh -v user@host                     # verbose: видим какой ключ пробуется, какой алгоритм

Ключевая аутентификация (правильно)

Парольная - небезопасна (brute force). Ключи - стандарт:

bash
ssh-keygen -t ed25519 -C "alice@laptop"   # сгенерировать пару (ed25519 - современный)

▸создаст ~/.ssh/id_ed25519 (приватный) и ~/.ssh/id_ed25519.pub (публичный)

ssh-copy-id user@host                # положить .pub в ~user/.ssh/authorized_keys на host

▸теперь ssh user@host работает без пароля

Файл ~/.ssh/authorized_keys на сервере содержит публичные ключи которым разрешён вход. Права жёсткие - иначе sshd откажется:

bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# см. [[file-permissions]]

~/.ssh/config - алиасы и опции

Host prod
    HostName 10.20.30.40
    User deploy
    Port 2222
    IdentityFile ~/.ssh/prod_key
Host bastion
    HostName bastion.example.com
    User alice
Host internal-*
    ProxyJump bastion           # ходить через бастион автоматически
    User deploy

Теперь ssh prod или ssh internal-db1 работает без флагов.

Port forwarding

bash
# Local forward: localhost:8080 → host:80 ЧЕРЕЗ ssh
ssh -L 8080:localhost:80 user@host

▸теперь curl http://localhost:8080 идёт на удалённый :80

# Remote forward: на сервере открыть порт, направить ко мне локально
ssh -R 9090:localhost:3000 user@host

▸на удалённой машине localhost:9090 = моя локальная :3000

# Dynamic (SOCKS proxy)
ssh -D 1080 user@host

▸SOCKS5 proxy на localhost:1080, весь трафик идёт через host

Полезно для доступа к внутренним сервисам без VPN.

SSH agent

Чтобы не вводить passphrase ключа каждый раз:

bash
eval "$(ssh-agent)"             # запустить агент
ssh-add ~/.ssh/id_ed25519       # добавить ключ - passphrase спросят раз
ssh user@host                   # теперь без пароля
ssh-add -l                      # что в агенте

Agent forwarding (ssh -A) - рискованная фича: пробрасывает агент на удалённый хост. Не использовать на не-доверенных серверах (root там может подписать что угодно от твоего имени).

scp / sftp / rsync

Копирование файлов через тот же канал:

bash
scp file.txt user@host:/path/         # старая школа, простая
scp -r dir/ user@host:/path/          # рекурсивно
rsync -avzP file.txt user@host:/path/ # современный: incremental, прогресс, сжатие
sftp user@host                        # интерактивный FTP-like

Используй rsync для всего нетривиального - резюмирует прерванное.

Серверная сторона

Конфиг - /etc/ssh/sshd_config:

Port 22
PermitRootLogin no                 # не пускать root напрямую
PasswordAuthentication no          # только ключи
PubkeyAuthentication yes
AllowUsers alice bob

После правки:

bash
sudo sshd -t                       # синтаксис-проверка
sudo systemctl reload ssh          # применить (HUP signal - не разорвёт текущие сессии)

Безопасность

  • Только ключи, не пароли
  • Не root: PermitRootLogin no
  • fail2ban или аналог - блокировать brute-force
  • Нестандартный порт - снижает шум, но НЕ заменяет защиту
  • Известные хосты: ~/.ssh/known_hosts - проверка fingerprint'а сервера; warning «host key changed» - повод остановиться и проверить

§ команды

bash
ssh-keygen -t ed25519 -C 'alice@laptop'

Сгенерировать современный ключ (ed25519 быстрее и короче RSA)

bash
ssh-copy-id user@host

Положить публичный ключ на сервер для passwordless-входа

bash
ssh -L 5432:db.internal:5432 bastion

Local-forward: локальный 5432 → удалённая БД через bastion

bash
ssh -J bastion user@internal

ProxyJump через bastion одной строкой (без -L)

bash
ssh-add -l

Список ключей в текущем ssh-agent'е

§ см. также

  • tls-handshakeTLS handshakeTLS - слой шифрования поверх TCP. Перед передачей данных стороны делают handshake: обмениваются ключами, проверяют сертификат, выбирают cipher.
  • tcp-handshakeTCP three-way handshakeTCP-соединение открывается тремя пакетами: SYN от клиента, SYN-ACK от сервера, ACK от клиента. После - соединение Established, можно слать данные.
  • cmd-rsyncrsync - инкрементальная синхронизация файловrsync копирует только изменённые блоки файлов локально или по SSH. `-avz` базовая комбинация (archive + verbose + compress). `--delete` зеркалирует. `--dry-run` обязателен перед первым запуском.
  • ftp-sftpFTP и SFTP - передача файловFTP, старый протокол с control + data соединениями (active/passive modes), без шифрования. SFTP, подсистема SSH, ничего общего с FTP кроме имени. Сегодня, SFTP или [[cmd-rsync|rsync]].
  • ssh-hardeningSSH hardening - закрытие сервераSSH hardening: ключи only (PasswordAuthentication no), отключить root-login, AllowUsers/AllowGroups, MaxAuthTries, fail2ban-jail на sshd. Опционально - нестандартный порт + Match-блоки для гостей.
  • kerberosKerberos - сетевой single sign-onKerberos - SSO-система с тикетами на временной криптографии. Один раз вводишь пароль (`kinit`), получаешь TGT, дальше KDC выдаёт service tickets в обмен. Основа AD и FreeIPA.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки