DEdeshka
ВойтиРегистрация
Урок 2.5 · 25 мин · текст

SSH и ключи

Подключение к серверу, ключи вместо паролей, scp и туннели.

Данные живут на серверах, а не на вашем ноутбуке. SSH это способ открыть терминал на удалённой машине так, будто вы сидите за ней. Инженер данных делает это каждый день: посмотреть логи Airflow, проверить место на диске, пробросить порт до базы.

Как это работает

ssh user@5.42.99.125        # подключиться по адресу
ssh user@dwh.company.ru     # или по имени хоста
exit                        # выйти обратно

Первый раз сервер спросит, доверяете ли вы ему, и запомнит отпечаток в ~/.ssh/known_hosts. Дальше либо пароль, либо ключ. Пароли в командах и скриптах неудобны и небезопасны, поэтому взрослый вариант один: ключи.

Ключи

Пара ключей это два файла. Приватный остаётся у вас и никому не показывается. Публичный вы отдаёте администратору, он добавляет его на сервер в ~/.ssh/authorized_keys, и с этого момента вход происходит без пароля.

ssh-keygen -t ed25519 -C "имя@компания"   # создать пару, Enter на все вопросы
cat ~/.ssh/id_ed25519.pub                # публичный ключ, его можно копировать в письмо
ls -l ~/.ssh                             # приватный ключ должен быть -rw------- (600)

Алиасы в ~/.ssh/config

Вместо ssh de@5.42.99.125 -p 2222 -i ~/.ssh/work_key каждый раз пишут конфиг один раз:

~/.ssh/config
Host dwh
    HostName 5.42.99.125
    User de
    IdentityFile ~/.ssh/id_ed25519

После этого достаточно ssh dwh. Алиасы работают и для scp, и для туннелей ниже.

Файлы туда и обратно

scp report.csv dwh:/home/de/reports/      # отправить файл на сервер
scp dwh:/var/log/etl.log ./               # забрать с сервера
rsync -av data/ dwh:/home/de/data/        # синхронизировать папку, докачивает только изменения

Туннель до базы

База на сервере обычно закрыта от интернета и слушает только localhost. Туннель делает так, что порт на вашем ноутбуке ведёт к порту на сервере через SSH:

ssh -N -L 5432:127.0.0.1:5432 dwh

После этого ваш DBeaver или Python подключаются к localhost:5432, а на самом деле общаются с базой на сервере. Флаг -N значит «без командной строки, только туннель», -L описывает проброс. Это самый частый способ работать с продовой базой безопасно.

Практика

Настоящей сети в учебном терминале нет, но всё остальное настоящее: ключи, конфиг, права.

учебный терминалзадания 0 / 5
Введите команду. Подсказка: help покажет, что умеет этот терминал.
de@deshka:~$
ЗАДАНИЯ
  1. 1. Сгенерируйте пару ключей ed25519
  2. 2. Выведите публичный ключ на экран (его вы будете отправлять администратору)
  3. 3. Добавьте в ~/.ssh/config алиас dwh для хоста 5.42.99.125 с пользователем de
  4. 4. Попробуйте подключиться по алиасу: ssh dwh
  5. 5. Убедитесь, что права на приватный ключ 600 (ls -l ~/.ssh)
решённые задания сохранятся в прогресс после входа

Что запомнить

  • ssh user@host открывает терминал на сервере, ключи заменяют пароли.
  • Публичный ключ отдаём, приватный храним с правами 600.
  • ~/.ssh/config превращает длинные команды в ssh dwh.
  • scp и rsync переносят файлы, ssh -L пробрасывает порт до базы.