Введение
Чтобы обезопасить свой сервер от взлома, рекомендуется использовать доступ по SSH через RSA ключи. Это может показаться сложным или нереализуемым, но на самом деле процесс прост. Кроме того, один и тот же ключ можно использовать для авторизации на множестве серверов. Рекомендуется иметь два ключа: один для работы и один для личных задач.
SSH ключ, в отличии от пароля подобрать почти нереально.
Почему необходим SSH ключ: хакеры долбятся на SSH порт до тех пор, пока не переберут пароль. И долбятся они с других взломанных серверов. Так что даже нельзя узнать, в какой стране находится сам хакер. Всё скриптами делается. Сначала один сервер покупают где-то далеко, где не найдёшь концы. Дальше он перебирает пароль для нескольких десятков. Потом наконец заходит на один, закачивает скрипт и запускает — и вот уже несколько штук перебирают сервера пароли до ещё десятков. их количество расчёт и мощность увеличивается. Поэтому и приходит сотня ошибок входа. Если пароль менее 12 символов, то его сломают, но не быстро. Если 8 или менее, то сломают быстро, может быть даже за одну ночь.
А если лень делать?
Если лень делать, то приготовьтесь терпеть кучу долбящихся на SSH порт серверов, решать жалобы, связанные со взломом, поиск вредоносных скриптов. Если вредоносный скрипт сделан искусно, то он может себя возрождать после перезагрузки сервера. Если его заразят таким скриптом, то кранты. Сервер, заражённый скриптом обычно ломает другие, одновременно с этим рассылая спам.
Поскольку Вы ответственны за администрирование своего сервера, то за защиту его от взлома ответственны также Вы. Не будьте врагом себе и используйте SSH ключи. Даже для тестовых серверов.
Ну а если поставить длинный пароль?
От входящих подключений с перебором пароля это не защитит. Их происходит по нескольку сотен в час.
Создание ключа
С помощью функционала SSH client (ssh-keygen)
Для начала перейдём к созданию ключа. Можно создавать ключ с помощью функционала SSH client, а можно через PuTTY.
SSH client (предполагает ОС Linux или MAC OS X)
Используйте команду:
ssh-keygen
После введения команды увидите следующий вывод:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
В ответе введите текст, который будет являться средством для раскрытия ключа. Сервер спросит его при подключении.
Если не желаете использовать passphrase, просто нажмите Enter.
Далее увидите подобный вывод о генерации ключа.
Налейте права на каталоги:
chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys
Скопируйте ключ на свой виртуальный сервер (должна быть разрешена авторизация по паролю через SSH):
ssh-copy-id root@ipaddress
Затем введите пароль. Увидите сообщение о том, что скопировано.
Теперь отключитесь от сервера и попробуйте произвести подключение по ключу:
ssh root@ipaddress
Пароль при подключении запросить не должно. Если так и произошло, значит Вы правильно всё делаете. Теперь отредактируйте файл с конфигурации SSH, и расставьте нужные права и перезапустите sshd командой:
chown -R root:root .ssh/ && chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys && sed -i -e '/^PermitRootLogin/s/no/prohibit-password/' -e '/^PasswordAuthentication/s/yes/no/' -e '/^#.* PermitRootLogin /s/^#//' /etc/ssh/sshd_config && systemctl restart sshd
Генерация ключа через PuTTYgen
Теперь разберём вариант с PuTTY. Здесь чуть менее удобно. Предполагаю, что Вы используете Windows.
Откройте Пуск и найдите PuTTYgen. Запустите его.
Выберите Key: ssh-rsa и тип: SSH-2 RSA key, затем справа снизу укажите длину 2048 напротив поля Number of bits in generated key.
Нажмите "Generate". Поводите мышью, чтобы ключ сгенерировался (это не прикол, уровень энропии возрастает, когда есть движения мыши, PuTTYgen ориентируется на энтропию, создаваемую мышью).
Далее необходимо скопировать наш публичный ключ на сервер. Для этого подключитесь к нему через PuTTY как root с паролем.
Затем вставьте в блокнот код:
cd ~ && mkdir -p ~/.ssh/ && echo 'ssh-rsa key comment' \ >> ~/.ssh/authorized_keys && chown -R root:root .ssh/ && chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys
Вместо слова key вставьте то, что видите в public key, предварительно перенеся текст на одну строку! Затем замените comment коммантарием к ключу (это например: raptor@work). Подключитесь к серверу с паролем. Скопируйте код, вставьте его и выполните. Отключитесь от сервера.
Теперь попробуйте зайти через PuTTY уже с ключом. Для этого перед подключением зайдите в раздел SSH — Auth. Нажмите Browse и укажите программе файл в формате ppk.
Конвертация ключей из PuTTY в OpenSSH формат
Если у Вас есть и Windows машины и Linux рабочие станции, а хочется отосюду заходить с одним ключом, то лучше всего будет сначала создать ключ с PuTTYgen, а затем сконвертировать его в вид, который понимает ssh-client
Для этого установите PuTTY на Linux машине:
sudo apt-get install putty
Теперь перейдите в каталог, где лежит ключ в формате ppk и откройте терминал оттуда:
puttygen my.ppk -O private-openssh -o my.key
Это создаст приватный ключ.
puttygen my.ppk -O public-openssh -o my.pub
Это создаст публичный ключ.
Теперь откройте текстовым редактором файл my.pub
Допишите вначале ssh-rsa а в конце комментарий, например: raptor@work
Теперь через обозреватель файлов оба файла поместите в ~/.ssh и измените имена:
my.pub назовите id_rsa.pub а my.key назовите id_rsa
И затем налейте права:
chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys
Подключение с Android
Предполагается, что ключ уже создали на компьютере.
Для подключения с Android используйте программу
Termux.
Обратие внимание также на дополнение
Termux Windet.
С помощью него можно создавать кнопочки для запуска скриптов, которые находятся с папке $HOME/.shortcuts/ Если лаунчер позволяет менять значок (это поволяет, например, CPL), то задавать удобные значки. С помощью этого дополнения можно сделать простые скрипты для учёта приёма лекарств или отсылки каких-либо типовых отчётов. Также можно выполять какие-то типовые действия на сервере с помощью кнопочек, так как ssh-client позволяет выполнять команду на сервере сразу после подключения:
ssh root@ipaddress command
Как поместить имеющийся OpenSSH ключ на Android смартфон
После конвертации ключа и его преобразования то же самое надо положить в директорию для ssh в Termux (так как у Termux своя директория для ssh). Удобнее всего это сделать по L2 сети через ssh Запустите ssh сервер на Termux, затем подключитесь туда по SSH из той же L2 сети (то есть, находящейся за одним роутером).
Выполните это со смартфона:
pkg update && pkg update
Затем задайте пароль:
passwd
Это будет пароль для подключения по SSH к смартфону
Теперь определите пользователя для подключения:
whoami
Узнайте, какой порт использует SSH клиент на Вашем смартфоне:
netstat -at
Прокрутите список и увидите SSH порт Подключитесь с компьютера по ssh так:
ssh login@ipaddress -p sshport
login показала команда whoami на экране смартфона. sshport Вы увидели в netstat -at
Скопируйте публичный ключ как в предыдущей инструкции. Затем создайте ключ в каталоге Termux (напоминаю, что публичный ключ вместо key и комментарий наподобие raptor@work вместо comment):
cd ~ && mkdir -p ~/.ssh/ && echo 'ssh-rsa key comment' \ >> ~/.ssh/authorized_keys && chown -R root:root .ssh/ && chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys
Налейте права на SSH каталоги:
chmod 700 .ssh/ && chmod 600 ~/.ssh/authorized_keys
Выйдите из Termux. Откройте его снова. Теперь можете подключаться к Вашим серверам с тем же ключом, что и на компьютере.