Нам потребуется 2 ВМ. Я буду использовать две Ubuntu Server
Для начала создадим общую сеть NAT для виртуальных машин.
Откройте Файл -> Инструменты -> Менеджер сетей
Выберите Сети NAT и нажмите Создать. Должно получится примерно как на скриншоте:
Далее для каждой ВМ выполните откройте Настройки -> Сеть -> Выберите именно Сеть NAT для первого адаптера (не путать с просто NAT). Имя только что созданной сети. Настраиваемая машина в это время должна быть отключена
Поздравляем, сеть настроена!
Имеем:
Установим telnetd
- демон, который будет являться сервером telnet
sudo apt update && sudo apt-get install telnetd
Также установим openssh-server
(обычно предустановлен)
sudo apt install openssh-server
Имеем:
Подключимся к ВМ1 по технологии telnet
, для этого выполним:
telnet 10.0.2.4
Где 10.0.2.4
- ip адрес ВМ1
Вводим логин/пароль и вот результат:
Чтобы оборвать соединение, напишем в консоль:
exit
Справка:Telnet является старым протоколом, который был создан в 1969 году. Он работает на основе текстовых команд и не обеспечивает шифрование данных, как SSH, хотя интуитивно они выполняют одну и ту же функцию.
Теперь попробуем подключиться по SSH, для этого выполним:
ssh 10.0.2.4
Мы сразу видим, что клиент ssh нас предупреждает о том, что мы подключаемся к этому компьютеру впервые. Подстверждаем отпечаток ответив yes
. Вводим данные для авторизации и вуаля:
Выходим, прописав exit
в консоль
Мы попробовали подключиться по SSH, используя пароль. Однако, SSH предоставляет куда более серьезные возможности идентификации, например, RSA-ключ. Зачем это нужно? Во-первых, Ваш пароль можно сбрутить. Если вы думаете, что ваш сервер никому не нужен, то вы ошибаетесь: китайские брутфорс-машины всегда рады халявному рак-боту. Во-вторых, не всегда хочется запоминать пароли, а иногда хочется просто подключиться к серверу без головной боли в один клик. Давайте попробуем настроить такую аутентификацию.
Для начала сгенерируем RSA ключ:
ssh-keygen -t rsa
Прожимаем везде enter. Ключ был сохранен в домашней директории, путь до файла ~/.ssh/id_rsa.pub
Затем отправим этот ключ на сервеер, выполнив:
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Вводим пароль и видим, что ключ успешно установлен:
Теперь попробуем подключиться к ВМ1. Мы видим, что ввод ключа не требуется:
Разорвем соединение exit
Мы успешно установили rsa ключ.
Утилита scp
умеет копировать файлы из сервера к клиенту и обратно. Программа использует протокол SSH и имеет следующий синтаксис:
scp file.txt пользователь@ip_адрес_сервера:~
Эта команда скопирует локальный file.txt
на удаленную машину пользователь@ip_адрес_сервера
в ~
- т.е в домашнюю папку пользователя пользователь
.
Давайте попробуем выполнить. Для этого создадим файл file.txt
c произвольным содержимым:
echo "supa text" >> file.txt
И отправим этот файл на ВМ1 в домашнюю директорию jkearnsl
:
scp file.txt [email protected]:~
Вернемся к ВМ1
Для редактирования конфигурации SSH сервера, перейдем к /etc/ssh/sshd_config
и отредактируем строку #Port 22
на Port 42
например:
sudo nano /etc/ssh/sshd_config
Сохраняем Ctrl + o
, enter, Ctrl + x
Перезапустим службу sshd для приминения изменений:
sudo systemctl restart sshd
Заодно можем включить автозагрузку (если не включена) процесса службы sshd для автостарта после перезагрузки командой:
sudo systemctl enable sshd
Попытаемся подключиться с ВМ2 к ВМ1, используя новый порт 42, используя флаг -p
:
ssh 10.0.2.4 -p 42
Соединение успешно установлено.
Нас просят установить на ВМ1 net-tools
и выполнить netstat -a | grep telnet
Вопрос: Объясните значения, обведённые синей рамкой.
Ответ: Из-за того, как работает TCP/IP, соединения не могут быть немедленно закрыты. Пакеты могут поступать не по порядку или быть повторно переданы после закрытия соединения.
- LISTEN Сокет прослушивает входящие соединения.
- ESTABLISHED Сокет имеет установленное соединение.
- TIME_WAIT Соединение уже было закрыто одной из сторон, но еще не было полностью закрыто на другой стороне.
При TIME_WAIT сокет все еще связан с локальным и удаленным IP-адресами и портами, которые использовались для установки соединения, поэтому мы наблюдаем порт 60838.
1. В чём разница между telnet и SSH?
Telnet является старым протоколом, который был создан в 1969 году. Он работает на основе текстовых команд и не обеспечивает шифрование данных, как SSH, хотя интуитивно они выполняют одну и ту же функцию.
2. Что такое порт?
Порт - это номер, который используется для определения, какое приложение или служба должны получать трафик данных, проходящий через сетевое устройство. Отслеживается ОС
3. Какие порты используют по умолчанию telnet и SSH?
По умолчанию Telnet использует порт 23 для соединения, а SSH использует порт 22.
4. Какой командой в Linux можно проверить готова ли сетевая служба принимать соединения?
sudo netstat -a | grep telnet
- на примере telnet
5. Какие способы аутентификации поддерживаются в SSH? В чём между ними разница?
Вообще я знаю 4ре способа, но нас ознакомили с 2мя:
- Парольная аутентификация
- Аутентификация с использованием открытых ключей (RSA, DSA)
Разница между ними в том, что в первом случае нам требуется вводить пару логин и пароль при каждом подключении, а во втором нам этого делать не нужно
Авторство: Бояршинов Н.О