Что такое SSH зачем нужно

SSH — это протокол прикладного уровня. SSH-сервер обычно прослушивает соединения на TCP-порту 22. Сервер SSH обеспечивает безопасную связь для удаленного управления сервером.

Как установить SSH на сервере

После установки сервера Debian необходимо наладить с ним удаленное соединение для управления им. Производить установку необходимо с правами суперпользователя root , необходимо выполнить команду su и ввести пароль суперпользователя или через sudo ,каждый раз вводя пароль суперпользователя, но можно немного отредактировать файл sudoers чтобы не вводить каждый раз пароль. как это сделать можно прочитать тут. Установка сервера SSH производим с правами суперпользователя.

Проверить установлен ли SSH.

sudo systemctl status ssh

Если установлен увидим в терминале:

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-04-30 18:12:35 MSK; 24min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1677 (sshd)
    Tasks: 1 (limit: 2359)
   Memory: 3.6M
   CGroup: /system.slice/ssh.service
           └─1677 /usr/sbin/sshd -D

Установка SSH

apt update
apt upgrade -y
apt install ssh -y

Или, что для Debian одно и то же все равно устанавливается OpenSSH, такой командой:

apt update
apt upgrade -y
apt install openssh-server -y

Добавить SSH в автозагрузку

Чтобы каждый раз после перезагрузки или включения сервера не надо было активировать SSH нужно включить его в автозагрузку

sudo systemctl enable ssh

Как узнать IP адрес сервера

Локальный

Теперь у нас есть удаленный доступ к серверу, можно от него отойти и с удобствами продолжать дальнейшие настройки. Не забыв узнать его ip-адрес в локальной сети:

ip addr show | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*'

Или командой

hostname -I

Внешний

Адрес по которому можно подключиться из интернета, грубо говоря с любой точки планеты, где есть доступ во всемирную паутину. При условии, что сервер находится не за NATом. А если за натом, то порты к нему прокинуты.

wget -q -O - ifconfig.me/ip

Подключение к удаленному серверу по SSH в Windows 10

Если OpenSSH не включен, то нужно сделать некоторые телодвижения

В поиске набрать: Параметры - Открыть - Приложения - Дополнительные параметры в строке поиска установленных компонентов набрать Клиент ssh , если его нет, то нажать +Добавить в строке поиска набрать Клиент ssh поставить галку и нажать Установить. После установки обязательно перезагрузить виндовс.

Подключение к серверу SSH в Windows 10 по паролю

Все что нужно для связи с сервером установлено, его адрес известен, теперь подключаемся, первое соединение будет по паролю. Открываем cmd вводим:

ssh -p порт имя_пользователя@айпи_адрес_сервера порт можно не указывать, если в целях безопасности он не изменен

ssh -p 22 wildserver@192.168.0.15

При первом подключении будет предупреждение с которым соглашаемся написав yes

The authenticity of host '192.168.0.15 (192.168.0.15)' can't be established.
ECDSA key fingerprint is SHA256:XVVCjPfdEKCj+vLyyIipy1ViGG9ienBkzpROFRtcufU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Попросят ввести пароль пользователя от имени которого подключаемся, введя его попадаем в командную строку сервера.

Подключение к серверу SSH в Windows 10 по ключу

Удобство подключения по ключу состоит в том что не надо вводить каждый раз пароль при подключении и дает защиту от брутфорс атак. Для генерации ключа должен быть установлен openssh-client.

  • Нажать Пуск, выбрать Параметры (шестеренка)
  • Выбрать Приложения из Параметры Windows
  • Выбрать Приложения и возможности Дополнительные возможности (Дополнительные компоненты)
  • Выбрать «Клиент OpenSSH» и нажмите кнопку «Установить».

Утилиты входящие в пакет:

  • ssh.exe
  • scp.exe
  • sftp.exe
  • ssh-add.exe
  • ssh-agent.exe
  • ssh-keygen.exe
  • ssh-keyscan.exe

Открыть cmd вводим:

ssh-keygen

Поступит предложение создать папку .ssh , если ее нет, то появится. В этой папке создадутся два файла с именами - id_rsa и id_rsa.pub Соглашаемся нажав ввод.

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa):

Попросят ввести пароль для использования ключа. Это на тот случай, если вашим компьютером может воспользоваться злоумышленник. Если пароль не нужен оставляем поле пустым, нажимаем ввод два раза. На экране увидим пути к двум созданным файлам:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\user/.ssh/id_rsa.
Your public key has been saved in C:\Users\user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RIjWELs/yTOtfWEmnOIGNP6iIhixG/qazVeOKpb70g0 user\user@User
The key's randomart image is:
+---[RSA 3072]----+
|    o= ..        |
|    o.o.         |
|   ..   .        |
|.   o. .         |
| o o.. .S.       |
|+  Eoooo+ +      |
|o+o oBB..+ .     |
|BB .+.=*  .      |
|=*X= o. ..       |
+----[SHA256]-----+

Необходимо передать публичный ключ на сервер. В этом же окне cmd создадим каталог и скопируем туда ключ, путь и адрес сервера с пользователем указываем свои:

ssh wildserver@192.168.0.15 mkdir ~/.ssh
scp C:\Users\user/.ssh/id_rsa.pub wildserver@192.168.0.15:~/.ssh/

Заходим на сервер по паролю, чтобы дописать в файл authorized_keys новый ключ. Так можно дать доступ по ключу нескольким компьютерам дописав их ключи в этот файл.

ssh wildserver@192.168.0.15
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Выходим с сервера exit и вновь пробуем подключится по SSH, в этот раз пароль не будет запрошен.

Главное помнить подключение идет по стандартному порту 22, если порт подключения был изменен в конфигурационном файле SSH то его нужно указать при помощи ключа -p (маленькая буква) для команды ssh и ключ -P (заглавная буква) для scp пример:

ssh -p 1234 wildserver@192.168.0.15
scp -P 12345 /home/user/.ssh/id_rsa.pub wildserver@192.168.0.15:~/.ssh/

Подключение к удаленному серверу по SSH в Debian

Подключение к серверу SSH в Debian по паролю

Открыть терминал ввести команду:

ssh wildserver@192.168.0.15

При первом подключении будет предупреждение с которым соглашаемся написав yes

The authenticity of host '192.168.0.15 (192.168.0.15)' can't be established.
ECDSA key fingerprint is SHA256:XVVCjPfdEKCj+vLyyIipy1ViGG9ienBkzpROFRtcufU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Попросят ввести пароль пользователя от имени которого подключаемся, введя его попадаем в командную строку сервера.

Подключение к серверу SSH в Debian по ключу

Для генерации ключа должен быть установлен openssh-client

sudo apt install openssh-client

Открыть терминал ввести команду:

ssh-keygen

Подтвердить все нажатием Enter

Запомнить путь, где сохранился публичный ключ. Он указан после фразы Your public key has been saved in

Необходимо передать публичный ключ на сервер. Создать каталог и скопируем туда ключ, путь и адрес сервера с пользователем указываем свои:

ssh wildserver@192.168.0.15 mkdir ~/.ssh
scp /home/user/.ssh/id_rsa.pub wildserver@192.168.0.15:~/.ssh/

Заходим на сервер по паролю, чтобы дописать в файл authorized_keys новый ключ. Так можно дать доступ по ключу нескольким компьютерам дописав их ключи в этот файл.

ssh wildserver@192.168.0.15
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Выходим с сервера exit и вновь пробуем подключится по SSH, в этот раз пароль не будет запрошен.

Главное помнить подключение идет по стандартному порту 22, если порт подключения был изменен в конфигурационном файле SSH то его нужно указать при помощи ключа -p (маленькая буква) для команды ssh и ключ -P (заглавная буква) для scp пример:

ssh -p 1234 wildserver@192.168.0.15
scp -P 12345 /home/user/.ssh/id_rsa.pub wildserver@192.168.0.15:~/.ssh/

Настройка безопасности SSH

Все изменения производить в файле конфигурации:

sudo nano /etc/ssh/sshd_config

Поиск нужной строки в редакторе nano нажать кнопки Ctrl+W ввести искомое слово.

Сохранение изменений Ctrl+O Enter сохранить файл Ctrl+X выйти.

Отключение входа по паролю

Когда удачно настроен вход по ключу можно отключить вход по паролю это предотвратит вход любого пользователя с помощью SSH с использованием пароля. Входим на сервер и редактируем конфиг SSH.

Внутри файла найти PasswordAuthentication. Если он закомментирован, раскомментировать. Установить его на no чтобы отключить вход с паролем. Для кучи не лишним будет ChallengeResponseAuthentication запретить , если еще не стоит no. Включить аутентификацию по ключам SSH PubkeyAuthentication yes.

Замена стандартного порта доступа к SSH

В файле sshd_config находим #Port 22 раскомментировать и ввести значение желаемого порта.

После смены порта на нестандартный, доступ к серверу будет возможен с ключом -p номер порта

ssh -p номер_порта wildserver@192.168.0.15

Отключение или ограничение доступа root по SSh

Найти строчку PermitRootLogin по умолчанию она закомментирована со значением prohibit-password если ее раскомментировать, то аутентификация root разрешена любая возможная, кроме пароля.

возможные значения PermitRootLogin:

  • no - запретить вход пользователя root
  • yes - разрешить вход пользователя root
  • without-password - только с аутентификацией RSA (по публичному ключу)
  • forced-commands-only - только для команд

Рекомендую отключить доступ для root - поставить значение PermitRootLogin no

Доступ с определенных IP адресов

Если нету необходимости давать доступ к серверу SSH из глобальной сети, для большей безопасности ограничить прослушиваемые ip-адреса. Например доступ только из локальной сети:

ListenAddress 192.168.0.1/24

По умолчанию стоит слушать всех:

ListenAddress 0.0.0.0

Доступ определенных пользователей

Ограничить вход только определенным пользователям:

AllowUsers user1 user2

Перезагрузка сервера SSH

После любых изменений проверить конфигурацию

sudo sshd -t -f /etc/ssh/sshd_config

Перезапустить сервис SSH

sudo systemctl restart ssh

Переустановка сервера SSH

Бывают такие ситуации, когда где то в чем то ошибся и не сохранил файл конфигурации произвел изменения. После чего все пошло не так и перестало работать так как должно. Или еще какие то ошибки повлекшие не работоспособность сервера SSH. Для начала сохраним файл конфигурации, потому что в нем могут быть ценные комментарии наработанные годами.

sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.copy

Наиболее подходящим считаю такую переустановку в отличии от purge

sudo aptitude reinstall openssh-server -y

И далее восстанавливаем шаг за шагом конфиг

Настройка Fail2Ban

Описана здесь

Двухфакторная аутентификация

Ошибка доступа по SSH в windows 10

Бывает так, что подключаясь к серверу вылезает такая ошибка:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:HHD3xjYV/RdL7RvEnUe+CyATZip4nprz2aBSbj3K6gU.
Please contact your system administrator.

Это возможно, когда на этом же айпи адресе был другой сервер к которому подключались с этого же компьютера. Исправить довольно просто, но не просто было найти решение. В командной строке cmd виндовс набираем команду: ssh-keygen -R айпи_адрес_сервера

ssh-keygen -R 192.168.0.15

Прокомментировать можно

без регистрации здесь