Установка и настройка сервера ssh в linux

Подключение к SSH за NAT

Чтобы подключиться к домашней машине с Ubuntu через Интернет, вам необходимо знать свой общедоступный IP-адрес и настроить маршрутизатор на прием данных через порт 22 и их отправку в систему Ubuntu, где работает SSH.

Чтобы определить общедоступный IP-адрес компьютера, к которому вы пытаетесь подключиться по SSH, просто перейдите по следующему URL-адресу: .

Когда дело доходит до настройки переадресации портов , каждый маршрутизатор имеет свой способ настройки переадресации портов. Чтобы узнать, как настроить переадресацию портов, обратитесь к документации маршрутизатора. Короче говоря, вам нужно ввести номер порта, на который будут выполняться запросы (порт SSH по умолчанию — 22), и частный IP-адрес, который вы нашли ранее (с помощью команды ) машины, на которой работает SSH.

После того, как вы нашли IP-адрес и настроили маршрутизатор, вы можете войти в систему, набрав:

Если вы открываете свою машину для доступа в Интернет, рекомендуется принять некоторые меры безопасности. Самый простой — настроить маршрутизатор на прием трафика SSH на нестандартный порт и пересылку его на порт 22 на машине, на которой запущена служба SSH.

Вы также можете настроить аутентификацию на основе ключа SSH и подключиться к компьютеру с Ubuntu без ввода пароля.

Configuring the Fedora Linux Firewall to Allow SSH Connections

If you are using a firewall to protect your system you will need to allow SSH connections before you be able to connect from a remote system. If you are using the basic firewall configuration (see Basic Fedora Linux Firewall Configuration) you can allow SSH connections using the Firewall Configuration tool. This tool is launched from the System->Administration->Firewall menu option as appears as follows:

If the box next to SSH is not already checked, check it and click Apply

If you have configured your firewall using the Firestarter tool you will need to set up an incoming connection policy to allow connections to the SSH service. Configuring Firestarter is covered in detail in Using Firestarter to Configure a Fedora Linux Firewall.

Как подключиться к Kali Linux по SSH

О том, как подключиться по SSH из различных операционных систем смотрите «Полное руководство по SSH (ч.3) Как подключиться к SSH. Настройка клиента OpenSSH».

Команда для подключения имеет следующий вид:

1

В качестве IP_АДРЕСа удалённой системы нужно указать её IP. Узнать IP адрес можно командой:

1

Кстати, чтобы Kali Linux после перезагрузки всегда имела одинаковый IP адрес, нужно настроить статический IP, как это сделать написано в статье «Как настроить Kali Linux на использование статичного IP адреса».

В данном случае IP адрес Kali Linux это 192.168.1.68. Пользователем по умолчанию является root. Тогда команда должна быть следующей:

1

Но проблема в том, что в SSH по умолчанию заблокирован вход пользователя root по паролю. Вариантов выхода два:

  • разрешить вход root по паролю
  • настроить аутентификацию с помощью ключей

Рассмотрим их оба, но я рекомендую именно второй вариант, как более безопасный и более удобный.

Настройка Netfilter и Iptables:

Для настройки установите набор утилит для управления Netfilter и Iptables (если он не установлен, зачастую он включен в дистрибутив ubuntu):

sudo apt install iptables

Для блокировки всех входящих соединений кроме разрешенных введите команду:

sudo iptables -P INPUT DROP 

Для разрешения входящих подключений по ssh c любых ip к серверу добавьте правила (в примере используется порт 2221):

sudo iptables -A INPUT -p tcp --dport 2221 -m state --state NEW -j ACCEPT  
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Для разрешения подключения с определенных ip или подсетей  используйте правила:

sudo iptables -A INPUT -p tcp -s ваша_сеть_или_ip --dport 2221 -m state --state NEW -j ACCEPT 

Подробнее про облачный сервер

Подробнее

ssh-agent

При работе с ключами возможны две неудобные ситуации:

  1. Если при создании ключа вы указали passphrase (пароль для ключа), то вам придется вводить пароль при каждом подключении
  2. Если у вас есть несколько ключей для разных целей, то при соединении по придется указывать нужный ключ вручную

ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В некоторых других системах приходится устанавливать и настраивать его автозапуск самостоятельно.

Если добавить ключ к агенту, то:

  1. для него больше не будет спрашиваться passphrase
  2. не нужно будет вводить ключ вручную — он будет автоматически использован при соответствующем подключении

добавит ключ id_rsa в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.

Если запустить без аргументов, то будут добавлены ключи ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 и ~/.ssh/identity.

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

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

Как подключиться по SSH

Для подключения по SSH нам необходимо знать такие данные:

  • ip адрес сервера, к которому мы собираемся подключится;
  • порт, на котором ожидает подключения SSH сервер, по умолчанию используется 22, но в целях безопасности порт подключения ssh часто изменяют;
  • имя и пароль пользователя на удаленном сервере.

Больше ничего не нужно, обычно эти данные присылают в письме вместе с описанием VPS. Теперь перейдем к практике.

1. Подключение через SSH в Linux

В Linux подключение по SSH выполняется с помощью утилиты ssh. Мы более подробно рассматривали работу с ней в статье как пользоваться ssh. Для подключения к удаленному компьютеру ее синтаксис будет выглядеть следующим образом:

$ ssh имя_пользователя@айпи_адрес

Это самый простой вариант, если вам также нужно задать порт, используйте опцию -p:

$ ssh имя_пользователя@айпи_адрес -p порт

Чтобы выполнить подключение по SSH Linux нажмите Ctrl+Alt+T для открытия терминала и наберите команду, заменив нужные значения:

Или, с нестандартным портом:

Если ip_адрес и порт правильные, то на следующем шаге программа попросит у вас ввести пароль:

Если пытаетесь подключится через SSH к этому серверу первый раз, то утилита также попросит подтвердить добавление нового устройства в свой список известных устройств, здесь нужно набрать yes и нажать Enter:

Теперь вы подключены, и все вводимые далее команды будут выполнены на удаленном сервере:

Если же произошла ошибка и IP адрес или порт введены неверно, то вы получите ошибку Connection Refused:

Просто убедитесь что порт введен верно. Если это ваш сервер, то, возможно на нем еще нужно разрешить подключение SSH в брандмауэре. В Ubuntu/Debian для этого на удаленном сервере выполните:

А в CentOS/Fedora:

Если вы используете другой порт для SSH, то замените 22 на свой порт. Для удобства подключения по SSH в дальнейшем можно настроить авторизацию по ключу ssh, чтобы не вводить каждый раз пароль.

Теперь вы знаете как подключиться по ssh linux и решить проблемы с подключением. А теперь перейдем к Windows.

2. Подключение через SSH в Windows

Раньше подключение по SSH из Windows выполнялось только с помощью сторонних утилит, например PuTTY. Но в Windows 10 был добавлен встроенный OpenSSH клиент и работает он точно так же, как и в Linux. По умолчанию этот компонент не активирован. Для его установки откройте Параметры -> Приложения:

Затем выберите Управление дополнительными компонентами:

Здесь нажмите добавить новый компонент и в открывлемся меню выберите OpenSSH Client и нажмите Устанвоить:

Дальше вернитесь назад и дождитесь завершения установки. После того, как SSH клиент будет установлен нужно обязательно перезагрузить компьютер.

После перезагрузки нажмите Win+R чтобы открыть окно запуска команд и наберите в нем cmd:

Далее нажмите Enter. Перед вами откроется командная строка Windows. Здесь можно использовать утилиту ssh. Синтаксис у нее абсолютно такой же, как и для Linux:

ssh имя_пользователя@айпи_адрес -p порт

Например, такой командой можно подключится по SSH к Raspberry Pi, который находится в вашей локальной сети по адресу 192.168.1.5:

Утилита предложит добавить устройство в список известных:

Затем предложит ввести пароль:

Все следующие команды будут выполняться уже на Raspberry Pi или другой удаленной машине, к которой вы подключились.

Теперь подключиться к серверу по ssh из этой операционной системы также просто как и из Linux.

×

Установка и запуск SSH на каждом хосте

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

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

$ file /etc/ssh/ssh_config
/etc/ssh/ssh_config: ASCII text

Если это вернет ошибку No such file or directory, то у вас не установлена SSH.

Сделайте аналогичную проверку для службы SSH (обратите внимание на d в имени файла):

$ file /etc/ssh/sshd_config
/etc/ssh/sshd_config: ASCII text

При необходимости установите сервер или клиент SSH:

Debian:

$ sudo apt install openssh-clients openssh-server

Fedora:

$ sudo dnf install openssh-clients openssh-server

Как правило, в большинстве современных дистрибутивов, клиентская часть уже установлена по умолчанию.

На удаленном компьютере запустите службу SSH с помощью systemd:

$ sudo systemctl enable --now sshd

SSH в Kali Linux на настольных компьютерах

В Kali Linux уже установлен пакет SSH, но автоматический его запуск отключён (как и всех других сетевых служб). Следовательно, для подключения к Kali Linux по SSH нужно запустить эту службу. При желании, её можно добавить в автозагрузку.

Есть два варианта запуска службы SSH:

  • ssh.service — служба SSH всегда будет запущена
  • ssh.socket — система откроет для прослушивания 22-й порт и будет ожидать подключение к нему. В случае подключения, система запустит службу SSH. Во всё остальное время (когда нет подключений по SSH), служба SSH будет отключена и не будет потреблять системные ресурсы.

Второй вариант является более предпочтительным. Подробности о первом и втором варианте смотрите в «Полном руководстве по SSH».

Для запуска службы SSH в Kali Linux:

1

Для добавления службы в автозагрузку:

1

Для проверки состояния службы:

1

Подключение по SSH

Подключение происходит с помощью команды
ssh + имя_пользователя + адрес хоста

Например

ssh [email protected]

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

The authenticity of host ‘192.168.56.101 (192.168.56.101)’ can’t be established.
ECDSA key fingerprint is SHA256:db8az/qbrWOJWvNRv2d9UHaDBnnUHanJ9Svca9vFx7c.
Are you sure you want to continue connecting (yes/no/)?

Если выбрать yes то в файл

добавится похожая строка:

|1|abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567

Если у вас на хосте не было директории .ssh после первого подключения она
должна появится.

Как разрешить заблокированные действия SELinux?¶

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

Очистим журнал аудита для того, чтобы избавиться от предыдущих ошибок и случайно не позволить лишние действия, накопившиеся с момента его прошлой ротации:

sudo bash -c "cat /dev/null > /var/log/audit/audit.log"

Запустим приложение, модуль ядра и т.д., который вызывает срабатывание SELinux и блокировку доступа к ресурсу (файлу, каталогу, сокету). Как только это произойдёт, воспользуемся утилитой audit2allow для анализа журнала аудита, облегчающей создание новых разрешающих правил для SELinux:

sudo bash -c "cat /var/log/audit/audit.log | audit2allow -M foo-bar"

В результате работы данной утилиты будет создан новый модуль , в котором разрешаются действия, записи о запрещении которых были внесены в журнал auditd ранее.

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

В сгенерированном файле модуля после комментария This avc can be allowed using one of the these booleans присутствует список переменных двоичного типа, установка которых поможет разрешить заблокированное действие. Справочную информацию можно получить из документации SELinux:

getsebool -a

Конфигурация sshd_config для максимальной безопасности

Измените порт по умолчанию для SSH-сервера

По умолчанию серверы SSH используют порт 22 для подключений. Рекомендуется изменить этот номер порта, чтобы предотвратить попытки ботов или киберпреступников войти в систему, хотя само по себе это не обеспечивает безопасности, мы можем остаться незамеченными при массовом сканировании из Интернета. Если, например, мы хотим использовать порт 22445, мы должны поместить в файл конфигурации следующее:

Порт 22445

Блокировать root-доступ для удаленных подключений

По умолчанию любой пользователь операционной системы, имеющий разрешения Shell, сможет войти на сервер. Кроме того, мы должны помнить, что если у нас активирован пользователь root, он также сможет подключаться к серверу локально или удаленно, избегая того, чтобы злоумышленник «угадывал» имя пользователя. По умолчанию боты всегда пытаются атаковать порт 22 и пользователя «root».

PermitRootLogin no

Таким образом, корневые подключения будут заблокированы, что не позволит неавторизованным пользователям проводить атаки методом грубой силы на наш SSH-сервер, чтобы угадать учетные данные пользователя root. У нас также есть другие варианты в этом разделе, например » PermitRootLogin без пароля », Где аутентификация разрешена, но не с использованием имени пользователя и пароля, а с использованием криптографических ключей RSA.

Проверка наличия утилиты и установка OpenSSH

Как правило, во многих дистрибутивах Linux утилита OpenSSH уже установлена по-умолчанию, но конечно же есть исключения. Для проверки наличия утилиты нужно ввести в терминал коротую команду:

И если вывод будет содержать возможные опции использования в примерно таком виде, значит OpenSSH установлен:

uxumax@debian9:~$ ssh
usage: ssh   
           port]  
             
           host]   
               
             ]
           hostname 
uxumax@debian9:~$ 

Если же вывод содержит сообщение, что команда не найдена, то нужно установить .

uxumax@debian9:~$ ssh
bash: ssh: command not found
uxumax@debian9:~$

Если у вас Debian или Ubuntu, то для установки введите:

Если у вас CentOS или Fedora, то введите

Как ограничить подключение по паролю

Если ограничить подключение по паролю, то использование утилиты OpenSSH будет более безопасным, потому что даже если украдут ваш пароль, то он будет практически бесполезным, потому что зайти на сервер по SSH, используя его, будет уже невозможным.

Для выставления ограничений необходимо иметь права администратора, вы должны быть авторизованным под root или использовать перед каждой командой. В примерах будет использоваться вариант без , чтобы не было расхождений с предыдущими примерами.

Для начала зайдем на сервер по ключу:

Используя консольный текстовый редактор nano, откроем под root файл настроек OpenSSH:

root@debian9:~# nano /etc/ssh/sshd_config 

После чего мы увидим содержимое файла настроек. Нам нужно найти строчку:

...

#PasswordAuthentication yes

...

Убрать в начале и заменить на . То есть ее надо преобразить вот в такой вид:

...

PasswordAuthentication no

...

Далее нажимаем сначала Ctrl + O , затем Enter, чтобы сохранить. И Ctrl + X, чтобы выйти.

Теперь, чтобы эти настройки вступили в силу, нужно перезапустить службу SSH. Для этого необходимо ввести следующую команду.

Теперь выйдем с сервера и вернемся туда, откуда подключались.

root@server:~# systemctl restart sshd
root@server:~# exit
logout
Connection to 80.90.255.255 closed.
uxumax@debian9:~$ 

И попробуем обратно подключиться к северу по паролю.

uxumax@penguin:~$ ssh [email protected]
Permission denied (publickey).

И видим, что сервер нас больше таким способом пускать не намерен. А теперь попробуем с помощью ключа.

uxumax@penguin:~$ ssh [email protected] -i ~/.ssh/server-key
Enter passphrase for key '/home/uxumax/.ssh/server-key': 
Linux debian9 5.4.40-04224-g891a6cce2d44 #1 SMP PREEMPT Tue Jun 23 20:21:29 PDT 2020 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@debian9:~# 

На этом настройка завершена, ключ не теряйте, а если потеряете, то пишите хостинг-провайдеру, чтобы он дал вам доступ по VNC, с помощью которого вы сможете включить вход по паролю обратно.

Чтобы сервер был в безопасности, советую настроить на нем фаервол и добавить порт SSH в список доверенных.

Как настроить автоматическое монтирование VeraCrypt томов при загрузке?¶

Откроем файл в :

sudoedit /etc/crypttab

Добавим в конец файла строку вида:

foo-bar UUID=XXXXXX /etc/keys/foo-bar.key tcrypt-veracrypt

Здесь foo-bar – внутреннее имя, которое будет использоваться dev-mapper, XXXXXX – , либо полный путь к файлу контейнера, /etc/keys/foo-bar.key – полный путь к ключевому файлу, либо файлу с паролем (разрыв строки в конце файла не ставится).

Откроем файл :

sudoedit /etc/fstab

Добавим в конец строку вида:

/dev/mapper/foo-bar /media/data auto defaults,x-systemd.automount 0 0

Здесь foo-bar – внутреннее имя, указанное ранее в crypttab, а /media/data – точка монтирования.

4: Настройка фаервола

На свежем сервере Fedora 21 нет активных приложений брандмауэра. Потому для этих целей можно использовать фаервол IPTables, о настройке которого и пойдёт речь в этом разделе.

Пакет IPTables уже установлен, но его нужно активировать; для этого нужен пакет iptables-services:

Установив этот пакет, включите IPTables, чтобы фаервол автоматически запускался при загрузке сервера.

Запустите IPTables:

IPTables поставляется с набором стандартных правил для Fedora 21. Одно из этих правил разрешает SSH-трафик. Чтобы просмотреть стандартные правила, введите:

На экране появится такой вывод:

Эти правила действительны дл одной сессии и будут сброшены при перезагрузке сервера. Чтобы сохранить текущие правила в файл и, таким образом, сделать их постоянными (они будут сохранены после перезагрузки), введите:

Теперь правила фаервола сохранены в файл iptables в каталоге /etc/sysconfig.

Файл конфигурации SSH

Если вы подключаетесь к нескольким удаленным системам через SSH на ежедневной основе, вы обнаружите, что запоминание всех удаленных IP-адресов, различных имен пользователей, нестандартных портов и различных параметров командной строки является трудным, если не невозможным.

Клиент OpenSSH считывает параметры, заданные в файле конфигурации для каждого пользователя ( ). В этом файле вы можете хранить различные параметры SSH для каждой удаленной машины, к которой вы подключаетесь.

Пример конфигурации SSH показан ниже:

Когда вы вызываете ssh-клиент, набирая , команда считывает файл и использует данные соединения, указанные для хоста dev. В этом примере эквивалентен следующему:

Дополнительные сведения см. В статье о файле конфигурации SSH .

Настройка SSH входа без пароля

Чтобы настроить SSH-вход без пароля в Linux, все, что вам нужно сделать, это сгенерировать открытый ключ аутентификации и добавить его в файл удаленных хостов.

Следующие шаги описывают процесс настройки входа по SSH без пароля:

  1. Проверьте существующую пару ключей SSH.

    Перед созданием новой пары ключей SSH сначала проверьте, есть ли у вас уже ключ SSH на вашем клиентском компьютере, потому что вы не хотите перезаписывать существующие ключи.

    Выполните следующую команду ls, чтобы проверить наличие существующих ключей SSH:

    Если есть существующие ключи, вы можете использовать их и пропустить следующий шаг или создать резервную копию старых ключей и сгенерировать новый.

    Если вы видите или это означает, что у вас нет ключа SSH, и вы можете перейти к следующему шагу и сгенерировать новый.

  2. Создайте новую пару ключей SSH.

    Следующая команда сгенерирует новую пару ключей SSH 4096 бит с вашим адресом электронной почты в качестве комментария:

    Нажмите чтобы принять расположение и имя файла по умолчанию:

    Затем инструмент попросит вас ввести безопасную парольную фразу. Независимо от того, хотите ли вы использовать кодовую фразу, решать вам, если вы решите использовать кодовую фразу, вы получите дополнительный уровень безопасности. В большинстве случаев разработчики и системные администраторы используют SSH без парольной фразы, поскольку они полезны для полностью автоматизированных процессов. Если вы не хотите использовать кодовую фразу, просто нажмите .

    В целом взаимодействие выглядит так:

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

  3. Скопируйте открытый ключ

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

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

    Вам будет предложено ввести пароль :

    После аутентификации пользователя открытый ключ будет добавлен в файл удаленного пользователя, и соединение будет закрыто.

    Если по какой-либо причине недоступна на вашем локальном компьютере, вы можете использовать следующую команду для копирования открытого ключа:

  4. Войдите на свой сервер с помощью ключей SSH

    После выполнения описанных выше действий вы сможете войти на удаленный сервер без запроса пароля.

    Чтобы проверить это, просто попробуйте войти на свой сервер через SSH:

    Если все прошло успешно, вы сразу же войдете в систему.

1: Создание пользователя

Войдите на сервер как пользователь root:

Постоянно использовать root не рекомендуется из соображений безопасности; для постоянной работы нужно создать нового пользователя с расширенными привилегиями sudo. В данном руководстве такого пользователя зовут finn. Выберите любое удобное имя и используйте:

Укажите надёжный пароль при помощи следующей команды (пароль нужно ввести дважды):

Затем добавьте нового пользователя в группу wheel, которая даёт доступ к sudo:

Выйдите из сервера и добавьте SSH-ключи для нового пользователя, запустив на локальной машине следующую команду:

Войдите на сервер как новый не-рутовый пользователь с привилегиями sudo. При входе пароль не будет запрошен, поскольку авторизация выполняется на основе SSH-ключей.

Создание пары ключей

На локальном компьютере c MacOS/Linux введите команду в терминале для генерации ключа:

ssh-keygen

Если требуется дополнительная защита, можно указать кодовую фразу при создании ключа, также можно пропустить данный пункт, нажав Enter. После этого ключ будет сгенерирован.

Чтобы увидеть ключ, введите команду:

cat ~/.ssh/id_rsa.pub

Для загрузки ключа на сервер введите команду:

 ssh-copy-id имя_пользователя@ip_удаленного_сервера -p2221(порт)

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

Для отключения снова перейдите в файл конфигурации ssh сервера:

sudo vi /etc/ssh/sshd_config

И укажите параметр:

PasswordAuthentication no

После чего перезапустите службу SSH.

Теперь вы можете подключаться к серверу с помощью пары ключей.

Выполнение входа через SSH с использованием ключей

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

Как работает аутентификация с помощью ключей?

Аутентификация с помощью ключей реализуется путем создания пары ключей: приватного ключа и публичного ключа.

Приватный ключ располагается на клиентском компьютере, этот ключ защищен и хранится в секрете.

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

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

Затем клиентский компьютер отправляет соответствующий ответ обратно серверу, после чего сервер будет знать, что клиент не является поддельным.

Весь этот процесс выполняется в автоматическом режиме после того, как вы настроите ключи.

Создание ключей SSH

Ключи SSH необходимо генерировать на компьютере, откуда вы хотите войти в систему. Как правило, это ваш локальный компьютер.

Введите следующую команду в командной строке:

Нажмите ENTER, чтобы принять используемые по умолчанию значения. Ваши ключи будут сгенерированы в файлах ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.

Перейдите в каталог с помощью следующей команды:

Просмотрите данные о разрешениях для файлов:

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

В то же время файл может использоваться совместно и имеет соответствующие разрешения для данной деятельности.

Как передать ваш публичный ключ на сервер

Если в настоящее время вы используете доступ к серверу с помощью пароля, вы можете скопировать ваш публичный ключ на сервер, воспользовавшись данной командой:

В результате будет создан сеанс SSH. Когда вы введете пароль, ваш публичный ключ будет скопирован в файл авторизованных ключей сервера, что позволит не использовать пароль при входе в следующий раз.

Как включить и безопасно настроить сервер SSH?¶

Сначала установим и активируем sshd:

sudo dnf install openssh-server
sudo systemctl enable --now sshd.service

Создадим собственный файл конфигурации, в который будем вносить изменения:

sudo touch /etc/ssh/sshd_config.d/00-foobar.conf
sudo chmod 0600 /etc/ssh/sshd_config.d/00-foobar.conf

Имя файла начинается с 00, т.к., согласно документации OpenSSH, приоритет среди всех файлов конфигурации имеет та директива, которая была указана раньше.

Отредактируем созданный файл для внесения своих изменений:

sudoedit /etc/ssh/sshd_config.d/00-foobar.conf

Отключим вход суперпользователем:

PermitRootLogin no

Запретим вход по паролям (будет доступна лишь аутентификация по ключам):

PasswordAuthentication no
PermitEmptyPasswords no

Сохраним изменения и перезапустим sshd:

Step 5 (Optional) — Allowing HTTP and HTTPS Traffic

In this section, we’ll cover how to edit the firewall rules to allow services for ports 80 (HTTP) and 443 (HTTPS).

The default IPTables rules allow SSH traffic in by default, but HTTP and its relatively more secure cousin, HTTPS, are services that many applications use, so you may want to allow these to pass through the firewall as well.

To proceed, open the firewall rules file by typing:

All you need to do is add two rules, one for port 80 and another for port 443, after the rule for SSH (port 22) traffic. The lines below in red are the ones you will add; the lines before and after are included for context to help you find where to add the new rules.

To activate the new ruleset, restart IPTables.

ssh-copy-id

Я предпочитаю использовать с флагом -i и задавать путь до нужного ключа

sudo ssh-copy-id -i ~/.ssh/andrei-key.pub [email protected]

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: «/home/andrei/.ssh/andrei-key.pub»
The authenticity of host ‘192.168.0.2 (192.168.0.2)’ can’t be established.
ECDSA key fingerprint is SHA256:abcdefgh1234567890abcdefgh1234567890abc+def.
Are you sure you want to continue connecting (yes/no/)?

Введите yes

Are you sure you want to continue connecting (yes/no/)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
[email protected]’s password:

Введите пароль

Number of key(s) added: 1

Now try logging into the machine, with: «ssh ‘[email protected]′»
and check to make sure that only the key(s) you wanted were added.

Теперь на хосте 192.168.0.2 в файле
/home/andrei/.ssh/authorized_keys
появилась новая запись вида

ssh-rsa AAAAB3NzaC1y … lseP/jXcq … Uydr/2CwQ &hellip ++TpY19pHqD/AnhL … Az62T/Ipyx … 8U2T [email protected]

Знак … заменяет длинные последовательности случайных символов для экономии места.

Проверить ключ можно командой

ssh -i ~/.ssh/mykey user@host

В нашем случае

ssh -i ~/.ssh/andrei-key [email protected]

Если вы не задавали пароль для ключа, то попадёте на удалённый хост без лишних движений

Last login: Sun Jan 10 16:48:27 2021 from 192.168.0.1

Как создать зашифрованный контейнер на диске?¶

При помощи утилиты dd создадим пустой файл для хранения криптоконтейнера размером в 1 ГБ:

sudo dd if=/dev/zero bs=1M count=1024 of=/media/data/foo-bar.dat

Здесь /media/data/foo-bar.dat – полный путь к файлу на диске.

Создадим зашифрованный LUKS контейнер:

sudo cryptsetup --verify-passphrase luksFormat /media/data/foo-bar.dat -c aes-xts-plain64 -s 256 -h sha512

Подтвердим процесс создания посредством набора на клавиатуре YES в верхнем регистре, затем укажем пароль, который будет использоваться для шифрования.

Загрузим контейнер и расшифруем содержимое:

sudo cryptsetup luksOpen /media/data/foo-bar.dat foo-bar

Создадим файловую систему ext4:

sudo mkfs -t ext4 -m 1 -L foo-bar /dev/mapper/foo-bar

Завершим сеанс работы с контейнером:

Как подключаться по SSH?

Для подключения к удаленной машине по SSH нужен клиент — специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, поэтому достаточно просто открыть терминал.

Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт. Вот как выглядит команда при использовании консольного клиента (в терминале):

Например, для подключения к серверу в аккаунт нужно ввести:

Если не указывать порт, то будет использован порт SSH по умолчанию — . Используемый порт задается при настройке SSH-сервера — программы, которая запущена на удаленном компьютере и ожидает подключения извне.

Fingerprint

При первом подключении появится сообщение:

Введите в первый раз.

Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов — fingerprint («отпечатки пальцев»). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Представьте, что кто-то внёс изменения в систему, например:

  • Переустановил SSH-сервер
  • Переустановил всю операционную систему
  • Заменил удаленный компьютер, сохранив его адрес

Даже в этом случае вы заметите изменения, потому что fingerprint тоже изменится.

Если fingerprint не меняется, то такое сообщение не будет появляться.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: