все посты

Закрываем ssh на ключ

Создаём ключ, заводим отдельного пользователя, запрещаем root-вход и отключаем авторизацию по паролю.

Подключаемся по ssh к серверу, смотрим на количество попыток подобрать пароль (например, 21794 😢) и выражаем крайнее удивление:

journalctl -t ssh --since "1 week ago" --no-pager | grep -c "Failed password"

На своей машине (у меня Win, если у вас нет — то вы и без меня знаете что делать) генерируем новый ключ:

ssh-keygen -t ed25519 -a 100 -C "stealthyuser@myserver" -f %USERPROFILE%\.ssh\id_ed25519_myserver

или используем уже существующий. Закидываем его на сервер:

scp -P 22 %USERPROFILE%\.ssh\id_ed25519_myserver.pub root@{сервер}:/tmp/id_ed25519.pub

Идём на сервер. Заводим нового пользователя:

sudo useradd -m -s /bin/bash -U -G sudo stealthyuser
sudo passwd stealthyuser

sudo -iu stealthyuser

mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat /tmp/id_ed25519.pub > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Включаем авторизацию по ключу:

sudo mcedit /etc/ssh/sshd_config

PubkeyAuthentication yes

И пробуем подключиться:

ssh -i %USERPROFILE%\.ssh\id_ed25519_myserver stealthyuser@{сервер}

Если всё ok, то

  • меняем ssh-порт на рандомный из 40000-65000,
  • запрещаем вход по ssh для root
  • и вообще вход по паролю
sudo mcedit /etc/ssh/sshd_config

Port 49269
PermitRootLogin no
PasswordAuthentication no

Проверяем конфиг и рестартуем сервис (текущее подключение не закрываем на всякий!):

sudo sshd -t

sudo systemctl restart ssh

Подключаемся на новый порт по ключу:

ssh -p 49269 -i %USERPROFILE%\.ssh\id_ed25519_myserver stealthyuser@{сервер}

А чтобы было удобнее, в %USERPROFILE%\.ssh\ создадим файл config:

Host myserver
  HostName {сервер}
  User stealthyuser
  Port 49269
  IdentityFile ~/.ssh/id_ed25519_myserver

Теперь для подключения достаточно ввести:

ssh myserver

Можно, конечно, заморочиться и поставить ufw, fail2ban, настроить port knocking.. Но это уже совсем другая история.