Закрываем 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.. Но это уже совсем другая история.