Пароль — это Боромир твоей инфраструктуры. Вроде свой, вроде воевал на твоей стороне, но в какой-то момент обязательно попробует забрать кольцо себе. Хочешь взять крепость? Один ключ. Больше ничего не нужно.

Сегодня куём это самое Кольцо Всевластия для входа на сервер, доставляем его по адресу и навсегда закрываем калитку для паролей. Три акта, как в хорошей трилогии: Братство Ключа, Две Крепости (локальная и серверная), Возвращение (пароля больше не будет).


Акт первый: куём кольцо (генерация 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_keys
    

    SSH — параноик почище Аларика Моуди “Шизоглаза”. Слишком открытые права на файлы — и он просто откажется их использовать.

  • Всё ещё просит пароль после правки конфига — проверь, что редактировал именно тот файл и что демон реально перезапустился:

    sshd -t
    

    Эта команда проверит конфиг на ошибки, прежде чем ты окончательно закроешь себе дверь, как Дарт Вейдер — люк шаттла перед тем, как улетит Оби-Ван.

  • Боишься окончательно закрыть себе доступ — держи открытой запасную сессию до полной проверки. Это твой “План Б”, он же эцих с гвоздями на всякий случай — надеешься не открыть, но пусть будет.


Эпилог

Теперь твой сервер пускает только тех, у кого есть правильный ключ — остальным вежливо, но твёрдо указывают на дверь, как пацакам без цаки на новой планете. Пароль больше не висит на воротах крепости написанным мелом — вместо этого ты несёшь Кольцо сам, и только твоя машина знает секретное слово для входа в Морию.

Один ключ, чтобы править всеми серверами. Один ключ, чтобы их найти. Один ключ, чтобы их всех собрать и во тьме authorized_keys связать.

Теперь иди и закрой уже наконец порт 22 для паролей на всех остальных своих серверах — этот Мордор сам себя не зачистит.