02. SSH-ключи, sudo и zsh
Зачем SSH-ключи
Парольная аутентификация — слабое место любой системы. Пароль можно подобрать (bruteforce), перехватить или подсмотреть. SSH-ключи используют асимметричное шифрование: закрытый ключ хранится только у вас, открытый — на сервере. Даже если злоумышленник получит доступ к серверу, без вашего закрытого ключа он ничего не сможет сделать.
Генерация ключа на локальной машине
Современный стандарт — Ed25519. Он быстрее и безопаснее RSA, а ключ занимает всего 64 байта:
ssh-keygen -t ed25519 -C "sergey@home-pc"
Флаг -C — комментарий, чтобы вы не путали ключи между машинами.
Система спросит:
Enter file in which to save the key (/home/sergey/.ssh/id_ed25519):
Можно оставить по умолчанию — просто Enter.
Enter passphrase (empty for no passphrase):
Пароль на ключ — настоятельно рекомендуется. Если кто-то получит ваш закрытый ключ, он всё равно не сможет им воспользоваться без пароля. Используйте менеджер паролей, чтобы не забыть.
Копирование ключа на сервер
Самый простой способ — утилита ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub sergey@95.216.42.187
Она сама добавит ваш открытый ключ в файл ~/.ssh/authorized_keys на сервере.
Если ssh-copy-id недоступна (Windows), сделайте руками:
cat ~/.ssh/id_ed25519.pub | ssh sergey@95.216.42.187 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
Проверяем:
ssh sergey@95.216.42.187
Если подключились без запроса пароля — ключ работает.
Отключение парольного входа в SSH
Теперь, когда ключ добавлен, парольный доступ можно и нужно отключить. Редактируем конфиг SSH на сервере:
sudo nano /etc/ssh/sshd_config
Находим и меняем следующие параметры:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
Объяснение параметров:
| Параметр | Значение | Зачем |
|---|---|---|
PasswordAuthentication no |
Запрещает вход по паролю | Только ключи |
PermitRootLogin prohibit-password |
Root может зайти только по ключу | Безопасность |
PubkeyAuthentication yes |
Включает аутентификацию ключами | Должно быть включено |
Перезагружаем SSH:
sudo systemctl restart sshd
Важно: не закрывайте текущую сессию, пока не проверите новую в соседнем терминале. Если что-то пошло не так, старая сессия останется открытой.
NOPASSWD sudo
Постоянно вводить пароль для sudo — утомительно. Добавим возможность выполнять sudo без пароля:
sudo visudo -f /etc/sudoers.d/nopasswd
Добавьте строку:
sergey ALL=(ALL) NOPASSWD: ALL
Теперь можно писать sudo <команда> без лишних вопросов.
Установка zsh и oh-my-zsh
Оболочка bash хороша, но zsh с плагинами — это совсем другой уровень удобства.
# Установка zsh
sudo apt update && sudo apt install -y zsh
# Смена оболочки по умолчанию
chsh -s $(which zsh)
Выйдите из сессии и зайдите заново — теперь будет zsh. При первом запуске появится меню настройки — выберите (2) Попробовать заполнить конфиг по умолчанию.
Теперь установим oh-my-zsh:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Тема powerlevel10k
У oh-my-zsh есть куча тем, но лучшая на сегодня — powerlevel10k:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
Включаем тему в ~/.zshrc:
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="powerlevel10k\/powerlevel10k"/' ~/.zshrc
Выходим и заходим снова — запустится интерактивный мастер настройки темы. Если мастер не появился, выполните:
p10k configure
Мастер задаст несколько вопросов про иконки, стиль и цветовую схему. Можно выбрать всё по умолчанию — потом перестроить одной командой.
Полезные плагины oh-my-zsh
Добавим пару плагинов для повседневной работы:
sed -i 's/plugins=(git)/plugins=(git sudo docker ssh rsync)/' ~/.zshrc
source ~/.zshrc
Плагин sudo позволяет нажимать Esc дважды — и перед командой появится sudo. docker добавит автодополнение для Docker.
Итог
Мы серьёзно повысили безопасность сервера: парольный вход отключён, root доступен только по ключу. А заодно сделали работу в терминале приятнее — zsh, oh-my-zsh и powerlevel10k.
В следующей части займёмся базовой настройкой системы: локаль, часовой пояс, swap и обновление пакетов.
Комментарии
Комментарии пока не подключены.