Для начальной настройки сервера авторизация по паролям достаточно удобна и проста. Такой вид подключения доступен сразу после установки практически любого linux-сервера. Для использования авторизации по паролям рекомендую сразу же сменить порт (по умолчанию используется 22), а так же установить и активировать пакет fail2ban.
Для изменения стандартного порта на более безопасный необходимо исправить значение параметра Port конфигурационном файле, например на 23333:
nano /etc/ssh/sshd_config
Содержимое файла:
....
#Port 22
Port 23333
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
....
После изменений следует перезапустить демон ssh. Перезапуск службы вызовет потерю подключение к серверу. Придется подключиться уже с указанием нового порта.
systemctl restart ssh
Данный шаг позволяет усложнить жизнь вредителям, сделать сервер безопаснее. При настройке новых VPS я часто встречаю попытки сканирования, и если порт 22 используется, тут же появляются записи в системном логе о неуспешных попытках авторизоваться по SHH. После отказа от использования стандартного порта ситуация уже не повторяется.
Для обеспечения дополнительной безопасности авторизации по паролям советую использовать пакет fail2ban. Просматривая системный лог, пакет будет отслеживать неудачные попытки авторизации и блокировать IP адреса нарушителей. По умолчанию для защиты SSH она готова из коробки. Нужно просто установить и запустить:
sudo apt update && sudo apt -y install fail2ban
sudo systemctl enable fail2ban && sudo systemctl start fail2ban
Главное — не выстрелить себе в ногу. Если несколько раз подряд ввести неподходящий логин и пароль, то fail2ban заблокирует и Ваш IP адрес. Возможно, будет более полное описание работы с этим продуктом. А пока можно получить отчет о его работе командой:
sudo fail2ban-server status sshd
Если все работает, вывод следующий:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Использование SSH-ключа для подключения к серверу позволяет сделать работу более безопасной (снижается вероятность взлома учетной записи) и более удобной для управления.
Для работы потребуется создать пару ключей (публичный и приватный), а так же разрешить службе SSH авторизацию по ключам. В интернете масса вариантов для данной настройки, я остановился на самой простой и удобной для меня. Генерируем ключи:
sudo ssh-keygen -t rsa -b 2048
Получаем два файла: id_rsa — секретный ключ, id_rsa.pub — публичный ключ. Добавим содержимое публичного ключа в конец файла authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
Не забываем разрешить авторизацию по ключам в конфигурационном файле /etc/ssh/sshd_config, удалив комментарий перед параметром PubkeyAuthentication yes.
....
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
....
В этом же файле можно запретить авторизацию по паролю. Советую это делать только после того, как проверите работу своих ключей. После любых изменений конфигурации сервиса ssh необходимо перезапускать службу.
Для того что бы добавить публичный ключ на удаленный сервер (при условии что файл и директория .ssh/authorized_keys уже существуют) можно воспользоваться командой:
cat id_rsa.pub | ssh aleksandr@192.168.100.2 'cat >> .ssh/authorized_keys'
Для работы с ssh клиентом из командной строки сервера можно заранее описать имена удаленных серверов, пользователей для авторизации и указать ключи. Все это делается в пользовательской директории в файле ~/.ssh/config
Примерное содержимое:
StrictHostKeyChecking no # Отключаем проверку fingerprint ключа
UserKnownHostsFile /dev/null # Отключаем запись известных хостов SSH
Host gate1
Hostname 192.168.100.2
User adm1n
Port 22
IdentityFile ~/.ssh/ssh@stend.key
Host gate2
Hostname 192.168.100.3
User adm1n
Port 22
IdentityFile ~/.ssh/ssh@stend.key
Теперь, для подключения к серверу 192.168.100.2 необходимо всего лишь дать команду:
ssh gate1