База знаний

Добавить ключ SSH и отключить пароли

Сгенерируйте ключ ed25519, установите его правильно, проверьте, прежде чем что-то сломать, и навсегда отключите аутентификацию по паролю.

Сгенерируйте ключ на машине, за которой вы сидите

Не на сервере. Закрытая половина никогда не должна существовать на хосте, к которому вы можете потерять доступ, а её копирование сводит на нет смысл её существования.

ssh-keygen -t ed25519 -a 100 -C "laptop-2026"

-a 100 задаёт число раундов KDF, защищающих парольную фразу, — единственное, что отделяет украденный ноутбук от вашего парка машин. Используйте парольную фразу. Если у вас есть аппаратный токен, используйте его вместо этого:

ssh-keygen -t ed25519-sk -O resident -C "token-1"

Установите открытую половину

ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@<ipv4>

Вручную, из root-сессии, если у учётной записи ещё нет пароля:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /dev/null /home/deploy/.ssh/authorized_keys
cat >> /home/deploy/.ssh/authorized_keys

Вставьте одну строку, затем Ctrl-D. Права имеют больше значения, чем люди ожидают: sshd отказывает в доступе, если домашний каталог или каталог .ssh доступны для записи группе, и объясняет это только в журнале демона, никогда — клиенту.

Ограничьте ключ, пока вы там

Опции в authorized_keys применяются к каждому ключу. restrict отключает всё, а затем вы добавляете обратно то, что ключу действительно нужно:

restrict,pty ssh-ed25519 AAAAC3Nza... deploy@laptop

Ключ, который существует для выполнения одной задачи, должен быть ограничен выполнением одной задачи:

restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backup

Проверьте перед блокировкой

Оставьте первую сессию подключённой. Из второго терминала:

ssh -o PreferredAuthentications=publickey deploy@<ipv4> id

Если это выводит ваш uid, путь ключа работает. Если нет, ssh -vvv на клиенте и journalctl -u ssh -n 50 на сервере вместе скажут, какая сторона недовольна. Примерно в половине случаев дело в правах, в остальных — в неправильном имени пользователя.

Отключите пароли

cat > /etc/ssh/sshd_config.d/20-keys-only.conf <<EOF
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey
EOF
sshd -t && systemctl reload ssh

AuthenticationMethods publickey — это ремень поверх подтяжек. Даже если более поздний drop-in незаметно включит пароли, демон всё равно откажет всему, что не является ключом.

Подтвердите с клиента, что дверь закрыта:

ssh -o PreferredAuthentications=password deploy@<ipv4>

Ожидаемый результат: Permission denied (publickey).

Ключи при развёртывании

В панели ведётся список ключей для каждой учётной записи. Отметьте нужные, и cloud-init запишет их во время первой загрузки, что означает, что экземпляр может существовать с самого начала с уже отключённой парольной аутентификацией. Прикрепление ключа к заказу превращает десять минут, описанных выше, в одну.

Если вы потеряли ключ

Здесь нет восстановления на основе идентичности, потому что мы не храним идентичность. Внеполосная консоль — это путь назад: она подключается к экземпляру по пути, который никогда не касается sshd, и из аварийной оболочки вы можете добавить новый ключ и продолжить работу.

Храните второй ключ на второй машине — и вам никогда не придётся читать эту статью.

Готовы, когда вы готовы

Выберите город. Выберите размер. Оплатите монетой.

Никаких форм о том, кто вы, никакого ожидания одобрения человеком, никаких звонков для проверки. Счёт оплачен — и учётные данные приходят на почту.