Ответ
SSH (Secure Shell) — это криптографический сетевой протокол для безопасного удаленного выполнения команд, управления системами и безопасной передачи файлов.
Ключевое применение SSH в DevOps:
- Удаленное управление серверами: Основной способ доступа к Linux/Unix-серверам для администрирования.
- Безопасное выполнение команд: Автоматизация задач через инструменты вроде Ansible, который использует SSH для подключения к хостам.
- Туннелирование (SSH Tunnels / Port Forwarding): Создание зашифрованных каналов для безопасного доступа к внутренним сервисам (базам данных, веб-интерфейсам) или обхода ограничений сети.
- Передача файлов: Использование
scpилиsftpдля безопасного копирования конфигураций, логов, артефактов сборки. - Git-операции: Многие Git-серверы используют SSH-ключи для аутентификации при операциях
git clone,git push.
Практика безопасного использования SSH-ключей:
- Использование ключей вместо паролей: Аутентификация по ключу криптографически надежнее.
- Защита приватных ключей: Приватный ключ (
id_rsa) должен иметь права600и никогда не передаваться. - Использование агента SSH (
ssh-agent): Позволяет кэшировать ключ в памяти, избегая его постоянного хранения на диске и многократного ввода парольной фразы.
Пример рабочего процесса с SSH-агентом и Ansible:
# 1. Генерация ключа (если нет)
ssh-keygen -t ed25519 -C "devops@company" -f ~/.ssh/id_ed25519
# 2. Добавление публичного ключа на целевой сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@production-server
# 3. Запуск ssh-agent и добавление ключа (часто делается автоматически в сессии)
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# 4. Теперь можно безопасно подключиться без пароля или запустить Ansible-плейбук
ssh user@production-server
ansible-playbook -i inventory deploy.yml
Конфигурация для повышения безопасности (~/.ssh/config):
Host prod-
HostName %h.example.com
User deploy-user
IdentityFile ~/.ssh/id_ed25519_prod
Port 2222 # Нестандартный порт
# Отключение менее безопасных методов аутентификации
PasswordAuthentication no
PubkeyAuthentication yes Ответ 18+ 🔞
А, SSH, ёпта! Ну это ж наше всё, как хлеб с маслом. Без него в девопсе нихуя не сделаешь, это как пытаться в туалет сходить с запертой дверью — можно, но мучительно и через окно.
Если по-простому, то это такая защищённая труба между твоим компом и серваком где-нибудь в облаках. По ней можно команды слать, файлы таскать, и всё это зашифровано так, что хоть соседний спец с перехватчиком сиди — нихуя не прочитает, только в потолок плевать.
Где эта штука в работе светится?
- Рулить серваками: Хочешь на свою убунту в хостинге залезть? Только через SSH, другого нормального пути нет. Пароли — это для лохов, настоящие мужики ключами работают.
- Автоматизировать всё: Тот же Ansible, который пол-инфраструктуры поднимает, по сути — просто умная обёртка над SSH. Он через него на все машины лезет и там порядок наводит.
- Туннели строить (SSH Tunnels): Штука волшебная. Допустим, у тебя база данных торчит только внутри сети, а тебе с локальной машины к ней приконнектиться надо. Берёшь SSH — и хуяк! — будто ты прямо там сидишь. Или наоборот, пробросил локальный порт на удалённый сервер и сидишь, как за стенкой. Безопасность, мать её.
- Файлы таскать:
scpилиsftp— лучшие друзья, когда нужно конфиги раскидать или логи с боевого сервера стащить. Опять же, всё шифруется, волнение ебать — ноль. - С Гитом работать: Гитхаб, Гитлаб — все они с радостью примут твой SSH-ключ вместо пароля. Удобно, безопасно, и не нужно каждый раз эту ебаную двухфакторку тыкать.
Как с ключами не обосраться и всё сделать по-взрослому:
- Ключи, а не пароли. Это аксиома. Пароль можно подобрать, слить, подсмотреть. Ключ, если он достаточно длинный и защищён пассфразой — это пиздец как надёжно. Хуй с горы сломаешь, пока подберёшь.
- Приватный ключ — святое. Этот файлик (
id_rsa) должен жить у тебя одного с правами600. Никому не показывай, никуда не копируй, в облака не заливай. Иначе будет тебе хиросима и нагасаки в одном флаконе. - Агент SSH (
ssh-agent) — твой кореш. Он как надёжный карманник: ключ у тебя в оперативке держит, подставляет, когда нужно. Запустил один раз, добавил ключ — и потом весь день летаешь по серверам без ввода парольной фразы. Удобство — овердохуища.
Вот смотри, как это обычно выглядит на практике:
# 1. Создаём ключ, если ещё нет. Ed25519 сейчас в фаворе, он и быстрее, и безопаснее.
ssh-keygen -t ed25519 -C "devops@company" -f ~/.ssh/id_ed25519
# 2. Закидываем публичную часть на сервер. `ssh-copy-id` — гениальная утилита, делает всё за тебя.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@production-server
# 3. Будим агента и суём ему наш ключ. Часто это само делается при логине, но на всякий.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# 4. Всё, пиплы! Теперь можно хоть на прод лезть, хоть ансибл гонять.
ssh user@production-server
ansible-playbook -i inventory deploy.yml
А если хочешь вообще красоту навести, заведи конфиг (~/.ssh/config):
Host prod-*
HostName %h.example.com
User deploy-user
IdentityFile ~/.ssh/id_ed25519_prod
Port 2222 # Стандартный 22 порт — для школоты, меняем на свой.
# Вырубаем всё лишнее и опасное
PasswordAuthentication no
PubkeyAuthentication yes
Теперь вместо ssh -p 2222 -i ~/.ssh/key deploy-user@server1.example.com пишешь просто ssh prod-server1. Красота, да и только! Главное, ключ не потеряй, а то будешь как дурак снаружи сервера стоять.