Правила хорошего тона: SSH
Nov. 29th, 2011 10:34 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
- Пользоваться ключами с passphrase. Т.е., нужно будет вводить её один раз, потом менеджер (ssh-agent) запомнит её до следующей перезагрузки.
- Менять порт SSH-сервера на нестандартный.
- Прописывать AllowUsers в настройках, чтобы нельзя было заходить под «случайно» заведённым пользователем.
- Прописывать настройки в ~/.ssh/config
Теперь рассмотрим подробнее, для начинающих, на примере Debian/Ubuntu:
Часть первая, на сервере
Если у нас Debian, то лучше сразу установить sudo:
su -c "apt-get install sudo"
и добавить себя в группу sudo:
su -c "adduser ваш_логин sudo"
Перед установкой, обновляем информацию о пакетах:
sudo apt-get update
Устанавливаем ssh-сервер, чтобы к нему можно было подключаться:
sudo apt-get install openssh-server
Выбираем редактор по-умолчанию (если не делали этого ранее):
sudo update-alternatives --config editor
Теперь нужно определиться с тем, какой у нас логин: даём команду
whoami
(если в результате видим root — значит, нужно искать свой логин каким-нибудь другим путём).
Редактируем файл настроек ssh-сервера:
sudo editor /etc/ssh/sshd_config
Добавляем строчки с настройками. Первым делом, меняем номер порта, который будет слушать SSH-сервер. Это нужно, чтобы многочисленные вирусы круглыми сутками не подбирали пароль:
Port 19
Теперь прописываем список логинов пользователей, которым можно заходить с помощью SSH (если нужно разрешить вход кому-то ещё — дописывайте логин через пробел):
AllowUsers ваш_логин
UPD 2020: Крайне рекомендую отключить вход на сервер по паролю указанием
PasswordAuthentication no
.Просим ssh-сервер перечитать настройки:
sudo service ssh reload
Если эта команда ничего после себя не выдала — значит сервер мы более-менее настроили.
Часть вторая, на десктопе
Следующие команды выполняем не на сервере, а на том компьютере, с которого будет получать доступ.
Убеждаемся, что мы не root:
whoami
Если видим «root», значит запускаем обычный терминал (Приложения → Стандартные → Терминал) и повторяем этот пункт.
Убеждаемся, что у нас ещё нет ssh-ключей:
ls -l ~/.ssh
В выводе не должно быть файлов «identity», «id_rsa», «id_dsa», «id_ecdsa» или «id_ed25519». Возможно, вы даже получите сообщение об ошибке. Всё нормально, у вас ещё нет ssh-ключей.
Создаём ssh-ключи:
ssh-keygen -C "ваш_комментарий"
В качестве комментария, принято использовать e-mail или лучше "e-mail имя_компьютера", на котором генерировали ключи.
В ответ на «Enter file in which to save the key» просто нажимаем [Enter],
А вот на «Enter passphrase» вводим свой самый лучший пароль, хороший и надёжный. Что-нибудь типа queafWodEis5.
На «Enter same passphrase again» повторяем пароль.
Всё, ключи готовы!
Теперь редактируем файл настроек ssh:
editor ~/.ssh/config
Вписываем в него:
Host ip-адрес-сервера Port 19 User ваш_логин_на_сервере
Если имя пользователя на сервере и на вашем компьютере совпадают, то строчку с логином не пишем.
Теперь копируем публичную часть ключа на сервер:
ssh-copy-id ip-адрес-сервера
Вводим пароль от сервера (больше он нам для входа не понадобится).
Если видим «Now try logging into the machine…», значит всё в порядке, ключ скопирован на сервер в /home/ваш_логин/.ssh/authorized_keys
Ура! Теперь, когда вы будете пытаться войти на сервер с помощью ssh, в первую очередь будут использованы ssh-ключи, и если не получится, то обычный пароль.
Если компьютер, с которого вы будете заходить на сервер, имеет постоянный ip-адрес, то на сервере в файле /home/ваш_логин/.ssh/authorized_keys можно указать этот ip-адрес перед ключём, и тогда этот ключ будет действительным только с этого адреса:
from="192.168.0.17" ssh-rsa AAAA…

Это произведение доступно по лицензии Creative Commons Attribution-ShareAlike (Атрибуция — С сохранением условий) 3.0 Непортированная или более новой.
no subject
Date: 2011-12-29 07:07 pm (UTC)no subject
Date: 2012-01-01 10:48 am (UTC)* Не заводить случайных юзеров (но AllowUser всё равно прописать)
* Забанить вход под рутом
* Юзать ключи и утилиту ssh-copyid вместо паролей.
* Отрубить X11Forwarding если не пользуемся
* Забиндить ListenAddress на реальный IP, а не на 0.0.0.0