Настройка и подключение к Linux по SSH с использованием паролей и ключей

Установка пакета SSH

Если SSH не установлен в системе, его можно установить в CentOS командой
yum install openssh-server
В Ubuntu командой
apt install openssh-server
Запуск SSH и добавление в автозагрузку
systemctl start sshd
systemctl enable sshd
Если не пропускает файрвол, можно разрешить в CentOS командой
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
В Ubuntu командой
ufw allow 22

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

Подключение по логину и паролю

Для подключения к другой системе Linux по логину и паролю достаточно ввести команду
ssh user@hostname
где
user - это пользователь удаленной системы, если совпадает с локальным, то можно не указывать
hostname - это ip-адрес или имя хоста удаленной системы
Например
ssh test_user@192.168.10.15
Если логин локального и удаленного пользователей совпадает, то имя пользователя можно не указывать
ssh hostname
Например
ssh 192.168.10.15
Если порт для подключения по ssh на удаленном сервере изменен, то при подключении нужно указать новый порт
ssh -p <port> user@hostname
Например
ssh -p 22020 test_user@192.168.10.15
Можно выполнить одну команду на удаленной системе, например следующая команда выведет имя хоста удаленной системы
ssh test_user@192.168.10.15 hostname

Настройка аутентификации на основе ключей SSH между Linux системами

Сначала нужно сгенерировать ключ командой
ssh-keygen
    при генерировании ключа нужно будет ответить на несколько вопросов:
  • Enter file in which to save the key - предлагается ввести имя файла в котором будет сохранен закрытый ключ, по умолчанию в каталоге пользователя создается скрытый каталог .ssh и в нем сохраняются ключи
  • Enter passphrase - предлагается ввести пароль для ключа, его можно не вводить, тогда при ssh подключении не нужно будет вводить пароль
После создания нужно скопировать открытый ключ на систему к которой будет осуществляться подключение
ssh-copy-id test_user@192.168.10.15
При этом нужно будет ввести пароль пользователя удаленной системы к которому будет осуществляться подключение

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

Проверить возможность аутентификации по ключу можно, например командой
ssh test_user@192.168.10.15 id
которая должна вывести id пользователя test_user удаленной системы

Подключение из Windows в Linux по SSH

Подключение по логину и паролю

Для подключения по ssh из windows используется ssh клиент, самый популярный это PuTTY, его можно скачать с официального |сайта|, можно скачать как установщик, так и портативную версию. А также, начиная с Windows 10 поддерживается SSH в командной строке, подключение осуществляется так же, как через терминал linux.

Для подключения по логину и паролю достаточно ввести ip-адрес или hostname сервера Подключение по логину и паролю

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

Можно сохранить параметры сессии, для этого нужно ввести ее название, оно может быть любым, и нажать Save. Сохранение параметров сессии

Настройка аутентификации на основе ключей SSH между Windows и Linux

Нужно в windows сгенерировать ключ с помощью программы PuTTYgen, которая устанавливается вместе с PuTTY, в портативной версии ее нет.

После ее запуска нужно нажать кнопку Generate и подвигать мышкой для генерации ключа PuTTYgen основное окно

Будут сгенерированы ключи PuTTYgen сгенерированы ключи Можно задать пароль для ключа в строке Key passphrase, тогда нужно будет вводить его при каждом подключении или можно не задавать.

Закрытый ключ нужно сохранить в системе с которой будет осуществляться подключение, нажав на кнопку Save private key, он будет представлять собой файл формата ppk

Открытый ключ нужно скопировать полностью прямо из окна PuTTYgen и вставить в файл
~/.ssh/authorized_keys
который должен быть создан в домашнем каталоге пользователя удаленной системы, к которому будет осуществляться подключение, при этом файл должен иметь право для чтения только владельцем.
Создание файла authorized_keys
cd ~
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chown -R test_user:test_user .ssh
chmod 700 .ssh
chmod 600 authorized_keys
vim authorized_keys   #вставить открытую часть ключа
authorized_keys может содержать в себе много ключей, например
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGhMhhwetREVgCvfG7lQBzzFnveWFPMkKV+OKGTOVjk3OzqiVWQWYtuJSQ1qft8tePdY5bytsETT/xr/3NFUYFuMCxp3h1oRLFn+BnQLYCTYRnHDpoojE+qMCo5O9aa0C9svgAWA7qGI892qyKvp/zwLhWpH6oN86dqw6X3DwvdEGN2wa1MNjAOdIv/639l9ieRhYwnZntOlvRsmIMyPjMI9CC/SEXENZghaS41M9KT7QqluA3AU0KSUh1xSheHSQ21O33xkdTAtL68wy0kJxJjSURLKulkr0xvlScVK7oVpObLjn1qaAO3yytaf2+6+RAMY7NjuHKA6SD3lBd6hc5 username1@hostname1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFJP2yGM9KZ2psLgNyNRXtjctZsBamoNtH0/4KY2U+W0ciGONhgKxG/1maNrLDYbjyFL8mUjC5y9EiBGRzSBstMSa789LoKp8D8TJsDQRyEMc4N2DZKVq3PXfvvDFkJT+XBdIWwJNtuPU3greEaBlNb+jxqxU36lgTx57cJdYHafzyD0ZuhNBfwNOSNRxMmsJpNHVeoePcxZ0ZQQ70h9S1VfqJZulIgO8N1sagKaUjZ6GbrGpE0KMWHmSZRzf24zlx14H5vhgKojQp6oEljfK6numn4wfSl1uNX6ePpM+B86SPCOzD8CIM6nMLpKstMPBWRtMYyZGlzV92/mDUbEK/ username2@hostname2

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

Принцип работы SSH

При подключении по SSH с использованием ключа, генерируется ключ. Файл открытого ключа копируется в системы, к которым планируется подключиться. Файл закрытого ключа - используется как учётные данные для аутентификации. Разрешение для закрытого ключа - 600, открытого - 644.

    Процесс получения сессионного ключа в общем состоит из:
  • При запросе на подключение от клиента сервер отсылает клиенту свой ключ, который храниться в каталоге /etc/ssh;
  • Если клиент производит соединение с данным сервером впервые, то пользователя спросят о доверии ключу сервера, при положительном ответе, на клиенте ключ добавляется в ~/.ssh/known_hosts. Если соединение ранее устанавливалось, то клиент сравнивает присланный ключ с ~/.ssh/known_hosts. (ключ можно удалить командой ssh-keygen -R <servername>);
  • Теперь, когда клиент и сервер установили защищенный канал, они могут произвести аутентификацию по паролю или ключам;
  • Клиент отсылает серверу имя пользователя и свой публичный ключ;
  • Сервер проверяет в файле /home/<username>/.ssh/authorized_keys наличие присланного клиентом открытого ключа. Если открытый ключ найден, то сервер генерирует случайное число, шифрует его открытым ключом клиента, и отсылает результат клиенту;
  • Клиент расшифровывает сообщение своим приватным ключом и отправляет результат серверу;
  • Сервер проверяет полученный результат на совпадение, и в случае успеха считает аутентификацию успешной;
  • Открывается доступ в командную оболочку пользователя на сервере или позволяется копирование файлов.

Безопасность SSH

Конфиг с настройками находится по пути:
/etc/ssh/sshd_config
После изменения параметров в конфиге нужно перезапускать ssh для их применения
systemctl reload sshd
Некоторые настройки, которые рекомендуется делать для безопасности:
Атакующие в первую очередь проверяют стандартный - 22 порт, можно его сменить
Port 1234    #порт для подключения по SSH
Можно запретить подключение по SSH для пользователя root
PermitRootLogin no    #запрет подключения по SSH под пользователем root
Запрет аутентификации по паролю, если задать этот параметр разрешено будет аутентифицироваться только по ключу
PasswordAuthentication no    #запрет подключения по паролю (разрешено подключаться только по ключу)
Можно указать то, каким пользователям разрешено использовать SSH
AllowUsers user1 user2    #список пользователей, для которых разрешено подключение по SSH
AllowUsers group1 group2    #список групп, для которых разрешено подключение по SSH