Пароль — это Боромир твоей инфраструктуры. Вроде свой, вроде воевал на твоей стороне, но в какой-то момент обязательно попробует забрать кольцо себе. Хочешь взять крепость? Один ключ. Больше ничего не нужно.
Сегодня куём это самое Кольцо Всевластия для входа на сервер, доставляем его по адресу и навсегда закрываем калитку для паролей. Три акта, как в хорошей трилогии: Братство Ключа, Две Крепости (локальная и серверная), Возвращение (пароля больше не будет).
Акт первый: куём кольцо (генерация SSH-ключа)
Открываем терминал. Представь, что это Ородруин, только без лавы и орков, зато с man-страницами.
ssh-keygen -t ed25519 -C "my-precious@laptop"
Почему ed25519, а не древний rsa? Потому что RSA — это Гэндальф Серый: мощный, уважаемый, но немного устаревший. Ed25519 — это Гэндальф Белый: быстрее, компактнее, современнее, тот же дух, но прокачанный после падения в Мории.
Терминал спросит, куда сохранить ключ:
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Жми Enter, если не хочешь выпендриваться с кастомными именами. Дальше попросит passphrase — пароль на сам ключ.
Это не тот пароль, который мы потом убиваем. Это другой уровень защиты — как эцих с гвоздями внутри эциха с гвоздями. Можно оставить пустым, но если ноутбук утащат гости из Плюка, пустой passphrase — это как оставить гравицаппу на видном месте с запиской “украдите меня”.
После команды в ~/.ssh/ появятся два файла:
ls ~/.ssh/
# id_ed25519 <- приватный ключ. Это Кольцо. НИКОМУ.
# id_ed25519.pub <- публичный ключ. Это как показать карту Мории — можно всем.
Запомни простое правило на всю жизнь линуксоида: приватный ключ не покидает твою машину никогда. Если ты отправил id_ed25519 (без .pub) кому-то “для удобства” — поздравляю, ты только что отдал Кольцо прямо в руки Саурону и сам предложил подвезти его до Мордора.
Акт второй: доставляем кольцо к серверу
Есть ленивый путь и путь настоящего джедая.
Способ для ленивых (но рабочий): ssh-copy-id
ssh-copy-id user@your-server-ip
Команда сама залогинится по паролю (последний раз, обещаю), заберёт твой публичный ключ и аккуратно положит его в файл ~/.ssh/authorized_keys на сервере. Это как отправить R2-D2 с чертежами Звезды Смерти прямиком в руки Повстанцев — быстро, надёжно, без драмы.
Способ для тех, кто любит руками (путь падавана)
Если ssh-copy-id недоступен (бывает на некоторых минималистичных дистрибутивах или в Windows без доп. тулзов):
cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Разберём по частям, как Рик объясняет Морти устройство портальной пушки:
cat ~/.ssh/id_ed25519.pub— читаем публичный ключ| ssh user@server "..."— пуляем его через портал прямо на серверmkdir -p ~/.ssh— создаём папку, если её там ещё нетchmod 700 ~/.ssh— только хозяин может туда заходить, никаких посторонних Джерриcat >> ~/.ssh/authorized_keys— дописываем ключ в список доверенныхchmod 600— файл с ключами читает и пишет только владелец
Проверка: работает ли портал
ssh user@your-server-ip
Если зашло без запроса пароля — поздравляю, ты только что открыл портал между измерениями, и в этом измерении пароли больше не нужны.
Если всё ещё спрашивает пароль — не паникуй, сверься с чек-листом в конце статьи, там разбор частых провалов.
Акт третий: изгоняем пароль с сервера навсегда
Это тот самый момент, когда Фродо бросает кольцо в Роковую гору — только тут мы бросаем туда возможность входа по паролю. Пути назад после этого особо нет, так что действуем аккуратно.
Шаг 1: убедись, что ключ точно работает
Серьёзно. Открой новую вкладку терминала, не закрывая текущую сессию, и зайди по ключу ещё раз:
ssh user@your-server-ip
Зашло без пароля? Отлично. Не закрывай старую сессию — она твой спасательный трос, если дальше что-то пойдёт не так.
Шаг 2: открываем конфиг SSH-демона
nano /etc/ssh/sshd_config
Нужные нам строки — это рубильники, которыми Ваш сервер превращается из проходного двора в крепость Минас Тирит с закрытыми воротами.
Находим (или добавляем, если их нет) и правим так:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
ChallengeResponseAuthentication no
Если строки закомментированы символом # — убери решётку, иначе sshd сделает вид, что ничего не читал.
Шаг 3: перезапускаем демона
systemctl restart sshd
Если команда не сработала — возможно, у тебя дистрибутив называет сервис иначе:
systemctl restart ssh
Шаг 4: проверка, что пароль действительно изгнан
Открой ещё одну новую вкладку (старую с активной сессией всё ещё не трогай!) и попробуй зайти по паролю намеренно:
ssh user@your-server-ip -o PubkeyAuthentication=no
Если сервер гордо ответит Permission denied (publickey) — миссия выполнена. Пароль изгнан туда же, куда Гендальф отправил Балрога — в пропасть, откуда он, будем надеяться, не вернётся на третью книгу.
Только теперь можно закрывать ту самую “страховочную” первую сессию.
Чек-лист на случай, если что-то пошло не по плану
-
“Permission denied (publickey)” при первом заходе — проверь права на файлы:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keysSSH — параноик почище Аларика Моуди “Шизоглаза”. Слишком открытые права на файлы — и он просто откажется их использовать.
-
Всё ещё просит пароль после правки конфига — проверь, что редактировал именно тот файл и что демон реально перезапустился:
sshd -tЭта команда проверит конфиг на ошибки, прежде чем ты окончательно закроешь себе дверь, как Дарт Вейдер — люк шаттла перед тем, как улетит Оби-Ван.
-
Боишься окончательно закрыть себе доступ — держи открытой запасную сессию до полной проверки. Это твой “План Б”, он же эцих с гвоздями на всякий случай — надеешься не открыть, но пусть будет.
Эпилог
Теперь твой сервер пускает только тех, у кого есть правильный ключ — остальным вежливо, но твёрдо указывают на дверь, как пацакам без цаки на новой планете. Пароль больше не висит на воротах крепости написанным мелом — вместо этого ты несёшь Кольцо сам, и только твоя машина знает секретное слово для входа в Морию.
Один ключ, чтобы править всеми серверами. Один ключ, чтобы их найти. Один ключ, чтобы их всех собрать и во тьме authorized_keys связать.
Теперь иди и закрой уже наконец порт 22 для паролей на всех остальных своих серверах — этот Мордор сам себя не зачистит.