SSH для новичков
Программистов, сисадминов, devops’ов, тестировщиков часто объединяет использование некоторых общих технологий. Например, возможность иметь удалённый доступ к серверу пригодилось бы любому из указанной выше анекдотичной компании. Поэтому в этой статье мы рассмотрим основы работы с протоколом SSH на базовом уровня (без генерации ключей, подписей, мам, пап и кредитов). «Продвинутое» использование посмотрим уже отдельно, в следующий раз. Материал подготовил Макс, автор YouTube-канала PyLounge. Поехали!
Введение
SSH (Secure SHell — защищенная оболочка) — сетевой протокол прикладного уровня, предназначенный для безопасного удаленного доступа к различным системам (Linux, Windows, Mac).
Данный протокол шифрует всю передаваемую информацию по сети. По умолчанию, используется 22-й порт. В основном он нужен для удаленного управления данными пользователя на сервере, запуска служебных команд, работы в консольном режиме с базами данных.
Эта служба была создана в качестве замены не зашифрованному Telnet и использует криптографические техники, чтобы обеспечить, что всё сообщение между сервером и пользователем было зашифровано.
Чтобы установить SSH-соединение, необходимы два компонента: SSH-сервер и SSH-клиент. Сервер прослушивает определенный порт (по умолчанию это порт 22) и при успешной аутентификации дает доступ пользователю. Все команды, которые используются на SSH-клиенте, отправляются через защищенный канал связи на SSH-сервер, на котором они выполняются и откуда отправляют результат работы обратно клиенту.
SSH-сервер
Устанавливается на управляемой операционной системе и принимает входящие подключения от клиентских машин, проверяя соединение одним из способов:
- по IP-адресу клиента, что не слишком безопасно из-за риска подмены;
- по публичному ключу клиента и имени пользователя. Нужно создать приватный (закрытый) и публичный (открытый) ключ. Зашифровав информацию одним ключом, можно расшифровать ее только другим;
- по паролю клиента, который передается в зашифрованном виде. Это один из наиболее распространенных вариантов. Вводить его нужно при каждом подключении.
Платные и бесплатные SSH-серверы есть для всех распространенных ОС:
- BSD — OpenSSH;
- Linux — dropbear, lsh-server, openssh-server;
- Windows — freeSSHd, copssh, WinSSHD, OpenSSH и т. д.
SSH-клиент
Используется для входа на удаленный сервер и выполнения команд. Через клиент выполняется управление удаленным компьютером.
SSH-клиенты разработаны для всех ОС. Имеют платные и бесплатные версии:
- Linux/BSD — openssh-client, putty, ssh, Vinagre;
- Windows — PuTTY, SecureCRT, ShellGuard;
- Android — connectBot.
Встроенный SSH-клиент Windows, основанный на OpenSSH, предустановлен в ОС, начиная с Windows 10 1809.
Установка OpenSSH на Ubuntu
Установка с помощью менеджера пакетов apt-get:
sudo apt-get install openssh-server
Проверка SELinux
Security Enhanced Linux, или SELinux – это усовершенствованный механизм контроля доступа, встроенный в большинство современных дистрибутивов Linux. Первоначально он был разработан Агентством национальной безопасности США для защиты компьютерных систем от вторжения злоумышленников и взлома. SELinux также может помешать работе с ssh. Поэтому необходимо убедиться, что он отключен, либо отключить его.
Устанавливаем доп. инструменты для работы с сетью и настройками безопасности:
sudo apt-get install policycoreutils sudo apt-get install net-tools
Проверяем статус SELinux. Состояние должно быть disable .
sestatus
Подключение к виртуальной машине с типом подключения NAT
Если виртуальная машина использует тип сетевого подключения NAT, то первоначально необходимо настроить проброс портов. Пробросим порт хоста 2222 (или любой свободный) на гостевой порт виртуальной машины номер 22 (порт ssh по умолчанию).
После этого мы можем подключиться из Windows к нашей виртуальной машине.
Подключение по ssh через PuTTY
Т.к. в качестве сетевого подключения у виртуальной машины используется NAT, при подключении мы будем указывать петлевой адрес localhost (127.0.0.1) c портом, на который был назначен проброс.
После этого вводим имя пользователя (пользователь должен существовать в linux. ) и пароль от этого пользователя.
Подключение по ssh через Командную строку Windows (cmd)
Запускаем командную строку сочетанием клавиш Win + R . В открывшемся окне указываем cmd. Нажимаем OK.
В общем видео подключение по ssh имеет вид:
ssh имя_пользователя@ip_адрес_компьютера_к_которому_подключаемся -p порт
Если для подключения используется стандартный порт ssh — 22, то порт можно не указывать.
В открывшемся окне вводим команду:
ssh student@127.0.0.1 -p 2222
Вводим пароль пользователя. Всё. Вы великолепны!
Подключение к виртуальной машине с типом подключение Сетевой мост
С типом подключения Сетевой мост необходимо выдать статический ip для Linux системы. Дальнейшее подключение будет уже по этому, выданному ip, а не через localhost.
Установка статического ip
Начиная с выпуска Ubuntu 17.10 NetPlan теперь это инструмент настройки сети по умолчанию для управления настройками сети, заменяющий файл конфигурации /etc/network/interfaces , который использовался в предыдущих версиях.
Файлы конфигурации для Netplan находятся в каталоге /etc/netplan и написаны на языке YAML. В этом каталоге вы найдете файлы конфигурации YAML.
Откроем конфигурационный файл:
sudo nano /etc/netplan/*.yaml
Отредактируем конфигурационный файл:
network: version: 2 renderer: NetworkManager ethernets: enp0s3: dhcp4: false addresses: [10.40.0.224/24] gateway4: 10.40.0.1 nameservers: addresses: [10.2.0.8, 10.2.0.3]
- ethernets — указывает на проводное Ethernet подключение;
- enp0s3 — имя сетевого интерфейса (можно узнать командой ifconfig);
- dhcp4 — автоматическая выдача ipv4-адреса с помощью службы dhcp (для ipv6 указывать dhcp6);
- addresses — ip-адрес и маска сети, которые назначаются компьютеру;
- gateway4 — шлюз по умолчанию;
- nameservers — список dns-серверов.
Посмотреть настройки можно с хостовой машины на Windows с помощью команды ipconfig /all.
Чтобы применить изменения и перезагрузить сеть, вводим команду:
sudo netplan apply
Подключение по ssh
Запускаем командную строку сочетанием клавиш Win + R . В открывшемся окне указываем cmd. Нажимаем OK.
В открывшемся окне вводим команду:
ssh student@10.40.0.224
Вводим пароль пользователя. Всё. Вы великолепны (2)!
Заключение
Несмотря на высокую защиту протокола, использование стандартного порта значительно повышает риск взлома сервера. Например, это можно сделать при помощи brute-force (атака полным перебором). Порт 22 — открытый, поэтому злоумышленнику нужно только подобрать логин и пароль к серверу. Это сложно, но возможно. Чтобы максимально ограничить доступ к серверу для злоумышленников (настроить брандмауэр, iptables), можно сменить SSH-порты.
Ресурсы, которые использовал
- Как включить SSH в Ubuntu 20.04 (Routerus):https://routerus.com/how-to-enable-ssh-on-ubuntu-20-04/
- Коротко об SSH / Хабр: https://habr.com/ru/sandbox/166705/
- Что такое SSH (блог REG.RU): https://help.reg.ru/support/hosting/dostupy-i-podklyucheniye-panel-upravleniya-ftp-ssh/chto-takoye-ssh
Подключиться к виртуальной машине по SSH
В этом разделе описывается подключение к виртуальной машине по SSH с помощью ключевой пары и с помощью пароля .
Чтобы подключиться к виртуальной машине, которой назначен публичный IP-адрес, используйте SSH-ключ или пароль. Подключиться к виртуальным машинам без публичного IP-адреса можно через VNC-консоль .
- Перед началом работы
- Подключение с помощью SSH-ключей
- Подключение с помощью пароля
Перед началом работы
- Статус виртуальной машины — Запущена .
- Виртуальной машине назначен публичный IP-адрес .
- Подключение к виртуальной машине по SSH разрешено в группах безопасности .
Для подключения вам потребуется:
- Публичный IP-адрес виртуальной машины.
- Логин пользователя виртуальной машины.
- Приватный ключ или пароль пользователя виртуальной машины.
Подключение с помощью SSH-ключей
Подключение с помощью SSH-ключей — более безопасный и удобный способ по сравнению с доступом по паролю.
OpenSSH на Linux / MacOS / Windows 10 PuTTY на Windows 7/8
- Откройте терминал.
- Выполните команду ниже. В команде замените user на логин пользователя виртуальной машины, а 188.50.92.41 на публичный IP-адрес виртуальной машины.
ssh user@188.50.92.41
Если на вашем устройстве есть несколько приватных ключей, дополнительно укажите, какой из них использовать для подключения. В команде ниже замените /path/private-key на путь до приватного ключа.
ssh -i /path/private-key user@188.50.92.41
Примечание Для подключений с Windows в пути необходимо использовать обратную косую черту path\private-key .
- Запустите PuTTY.
- В полях Host Name (or IP address) и Saved Sessions укажите публичный IP-адрес виртуальной машины.
- Нажмите Save , чтобы сохранить новую сессию и использовать ее в дальнейшем.
- Перейдите в раздел Connection → SSH → Auth и укажите путь к файлу закрытого ключа.
- Перейдите в раздел Connection → Data и в поле Auto-login username укажите логин администратора виртуальной машины.
- Перейдите в раздел Session и нажмите Save .
- Выберите сессию и нажмите Open .
- Примите предложение подтвердить ключ и добавить его в кеш.
Подключение с помощью пароля
Доступ по паролю по умолчанию не настроен для виртуальных машин. Пароль задается при создании виртуальной машины . Этот способ менее безопасен, чем подключение с помощью SSH-ключей.
Вы можете настроить этот тип доступа, изменив значение соответствующего параметра в конфигурационном файле sshd_config . Путь до конфигурационного файла может отличаться в разных операционных системах. В инструкции ниже рассмотрим настройку доступа по паролю на примере ОС Ubuntu.
- Подключитесь к виртуальной машине с помощью ключевой пары или через VNC-консоль .
- В конфигурационном файле SSH-сервера /etc/ssh/sshd_config измените значение параметра PasswordAuthentication :
PasswordAuthentication yes
После перезагрузки доступ по паролю будет включен, вы можете подключаться любым удобным способом:
OpenSSH на Linux / MacOS / Windows 10 PuTTY на Windows 7/8
- Откройте терминал.
- Выполните команду ниже. В команде замените user на логин пользователя виртуальной машины, а 188.50.92.41 на публичный IP-адрес виртуальной машины
ssh user@188.50.92.41
- Запустите PuTTY.
- В полях Host Name (or IP address) и Port укажите публичный IP-адрес и порт «22».
- Нажмите Open .
- В открывшейся консоли укажите логин и пароль пользователя виртуальной машины.
Как подключиться к Виртуальной машине с Linux?
Для облачных образов обычно используются типовые логины (username) ubuntu, debian, fedora, opensuse, cloud-user.
- Скачайте файл закрытого ключа, который находится в разделе Ключевые пары и имеет формат keyname-username.pem.ppk.
- Настройте сессию в PuTTY:
- Host Name — IP-адрес виртуальной машины.
- Укажите скачанный файл ключа .ppk в разделе Connection > SSH > Auth.
С помощью SSH-клиента встроенного в Windows 10
Клиент SSH установлен по умолчанию в Windows Server 2019, Windows 10 сборки 1809 и более новых билдах.
Для облачных образов обычно используются типовые логины (username) ubuntu, debian, fedora, opensuse, cloud-user.
- Скачайте файл закрытого ключа, который находится в разделе Ключевые пары и имеет формат keyname-username.pem.
- Для подключения используйте в командной строке или powershell команду ssh -i keyname-username.pem username@ip_host , например, ssh -i C:\Users\YourUserName\keyname-username.pem ubuntu@194.135.112.207 .
Подключение из MacOS
- Скачайте файл закрытого ключа, который находится в разделе Ключевые пары и имеет формат keyname-username.pem .
- Запустите приложение Terminal.
- Измените права на файл ключевой пары, с помощью команды chmod 600 полный_путь_к_файлу/keyname-userename.pem .
- Подключитесь к серверу через SSH, помощью команды ssh -i полный_путь_к_файлу/keyname-username.pem -p 22 username@111.11.111.111 , где:
- username — это название дистрибутива, например, ubuntu ;
- 111.11.111.111 — IP-адрес Виртуальной машины.
Подключение из Linux
Для облачных образов обычно используются типовые логины (username) ubuntu, debian, fedora, opensuse, cloud-user.
- Скачайте файл закрытого ключа который находится в разделе Ключевые пары и имеет формат keyname-username.pem.
- Для подключения используйте команду в терминале ssh -i путь_до_файла_ключа username@ip_host .
Файл приватного ключа должен быть доступен на чтение и запись только для пользователя-владельца. Для этого измените права доступа к файлу выполнив команду в терминале chmod 600 keyname-username.pem .
Из Putty подключаемся к виртуальной машине по SSH с ключом
С настоящими виртуальными машинами под управлением операционной системы Linux удобно работать через кроссплатформенное приложение PuTTY. Например, можно управлять каким-нибудь удалённым Debian 11 с домашнего компьютера, на котором Windows 10.
Удивительно, но с виртуальным сервером, который запущен в VirtualBox, тоже удобно работать через PuTTY – как минимум потому, что становится очень удобно копировать текстовую информацию (команды, код, конфигурацию и т.д.), пользуясь Ctrl+Insert и Shift+Insert. Ну а возможность вставлять из буфера текст простым нажатием на правую кнопку мыши — это буквально вишенка на торте 🙂
1. Проброс портов
Чтобы всё заработало, начинаем с проброса портов. Это поможет связать наш физический компьютер 127.0.0.1 и виртуальную машину (обычно она получает адрес 10.0.2.15, для проверки следует посмотреть командой ip a в командной строке).
В VirtualBox открываем настройки нашей виртуальной машины, добавляем правило проброса. Номер порта хоста выдумываем из головы, от 1024 до 65535, например 9999.
2. Генерация ключа
Скачиваем и запускаем Putty Key Gen. Генерируем пару ключей в формате RSA, длина 1024 (или больше на свой вкус). Нажимаем Generate. Для внесения элемента случайности необходимо хаотично перемещать мышь по экрану.
Получаем пару:
— личный (private) ключ – это файл, который сохраняем нажатием Save Private Key на свой компьютер в простое место типа C:\TEMP\key.ppk
— открытый (public) ключ – это текст вверху окна, который копируем в буфер, чтобы в будущем закинуть на виртуальную машину
Не вводите Key Passphrase, работаем без неё.
Очевидно, что генератор больше не понадобится, можно закрывать генератор.
3. Перенос ключа на ВМ
Скачиваем и запускаем PuTTY, подключаемся на адрес 127.0.0.1 на порт, который придумали самостоятельно. Нажимаем Open.
Входим со своими именем и паролем, например, root.
Устанавливаем mc, если ещё не установлен:
yum install mc -y
Обратите внимание, что в PuTTY мы копируем/вставляем команды, пользуясь Ctrl+Insert и Shift+Insert.
Запускаем файловый менеджер
Если вошли как root, мы уже в директории /root.
Если вошли под другим именем, перемещаемся в /root.
Создаём новую директорию с именем .ssh – для этого нажимаем F7.
Внутри .ssh создаём файл Shift+F4.
Вставляем из буфера текстовое тело открытого ключа, добавляем одну пустую строку, нажимая Enter.
Сохраняем файл – F2.
Указываем стандартное имя authorized_keys
Для выхода щёлкаем ESC дважды.
Выход из mc – F10.
Выход из сеанса – команда exit.
4. Вход по ключу
Теперь наслаждаемся входом без ввода пароля. Для этого запускаем PuTTY и подключаемся с параметрами
Host Name – root@127.0.0.1
Port – 9999
Слева в дереве раскрываем секцию SSH, выбираем Auth и кнопкой обзора выбираем наш файл ключа на локальной машине.
Подключаемся, нажав Open.
В терминале должны появиться такие строки:
Using username "root".
Authenticating with public key "rsa-key: drach.pro"
Last login: Tue Apr 4 14:56:16 2023 from 10.0.2.2
[root@drach]#
Обратите внимание, нет ни слова про пароль.