Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Использование команд Telnet в Linux/Unix

9348
12 минут чтения
Средний рейтинг статьи: 2.4

Telnet (telecommunications network) — это сетевой протокол (работающий по TCP-соединению), предназначенный для ручного управления удаленными машинами с помощью команд консольного терминала.

С помощью Telnet команды вводятся на локальной машине, а выполняются на удаленной. То есть пользователь сперва вводит IP-адрес и порт (по умолчанию 23) удаленного сервера, после чего выполняет команды на нем.

Несмотря на то, что в наши дни чаще всего используется SSH, Telnet до сих пор остается популярным инструментом для управления удаленными хостами.

В этом руководстве будет рассмотрено базовое использование команд Telnet в операционных системах на базе Linux. Все показанные примеры запускались на облачном сервере Timeweb Cloud под управлением операционной системы Ubuntu 22.04.

Telnet vs SSH

Telnet и SSH — похожие друг на друга технологии, позволяющие выполнять консольные команды на удаленных машинах.

Однако горизонтальное сравнение Telnet и SSH не совсем корректно. Скорее SSH, появившийся в 1995 году, является эволюционным преемником Telnet, созданным в 1969 году.

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

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

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

Исходя из этого, можно выделить некоторые ключевые отличия Telnet от SHH:

 

Telnet

SSH

Релиз

1969 год

1995 год

Порт

23

22

Уязвимость

Высокая

Низкая

Данные

Обычный текст

Зашифрованный текст

Специализация

Частные сети

Публичные сети

Полоса пропускания

Низкая

Высокая

Цветной (графический) терминал

Не поддерживает

Поддерживается

Установка Telnet

Чтобы проверить, установлен ли Telnet в системе, можно ввести в консольный терминал соответствующую команду с неправильно указанной опцией:

    

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

    

Если же в консольном терминале появился примерно такой вывод:

    

Или такой:

    

Тогда утилиту Telnet необходимо загрузить и установить вручную с помощью пакетного менеджера APT:

    

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

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Использование Telnet

Установление связи с удаленной машиной с помощью утилиты Telnet не требует ввода сложных команд и во многом напоминает работу с SSH.

Схема консольной команды выглядит так:

    

Здесь задаются три основных типа параметров для соединения с удаленной машиной:

  • IP-АДРЕС. Либо IP-адрес (IPv4 или IPv4), либо домен удаленной машины, к которой выполняется подключение.

  • ПОРТ. Открытый порт на удаленной машине, по которому выполняется подключение. По умолчанию Telnet прослушивает подключения на 23 порту.

  • ОПЦИИ. Дополнительные флаги с параметрами, которые уточняют нюансы подключения.

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

-4

Использовать IPv4-адрес во время подключения

-6

Использовать IPv6-адрес во время подключения

-8

Использовать 8-битную кодировку при отправке данных

-e

Изменить горячую клавишу отсоединения (escape-последовательность)

-E

Отключить горячую клавишу отсоединения (escape-последовательность)

-l

Указать явно имя пользователя для авторизации на удаленной машине

-a

Использовать имя пользователя для авторизации на удаленной машине из переменной окружения USER

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

    

В этом случае мы указали:

  • Опцию -4, сообщающую об использовании IP-адреса типа IPv4.

  • Сам IP-адрес удаленной машины.

  • Стандартный 23 порт, на котором удаленный сервер прослушивает Telnet-подключения.

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

    

После установки соединения с удаленным хостом Telnet может работать в двух режимах:

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

  • Посимвольный. Команды и данные вводятся посимвольно и отправляются на удаленный сервер тоже посимвольно. В этом случае любую возможную ошибку ввода исправить невозможно.

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

OPEN

Подключиться к удаленной машине

CLOSE

Отключиться от удаленной машины

LOGOUT

Отключить от удаленной машины и выйти из Telnet

STATUS

Проверить статус соединения с удаленной машиной

MODE

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

Соединение с локальным хостом

Самый простой способ проверить работоспособность Telnet — подключиться к локальному хосту:

    

Как правило, после выполнения этой команды возникает ошибка:

    

Это связано с тем, что на локальной машине не установлена служба Telnet — сервер (демон), прослушивающий 23 порт (по умолчанию) и обрабатывающий подключения.

Установить его можно через пакетный менеджер APT:

    

Обратите внимание на букву «d» после слова «telnet» — это не описка! Флаг -y автоматически положительно отвечает на вопросы во время установки.

После этого можно повторить попытку подключения к локальному хосту:

    

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

    

Для тестирования возможностей Telnet можно авторизоваться под пользователем root.

После этого консольный терминал потребует ввести пароль указанного пользователя:

    

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

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

    

В консольном терминале локальной машины появится сообщение о закрытии соединения:

    

При этом консольный ввод имени пользователя можно пропустить, заранее указав его с помощью опции -l:

    

В этом случае в консольном терминале появится информация о состоянии подключения и  предложение сразу ввести пароль:

    

Выполнение HTTP-запроса к удаленному хосту

Еще один вариант использования Telnet — выполнение HTTP-запросов к удаленным серверам.

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

    

Обратите внимание, что в команде был явно указан 80 порт, через который по умолчанию устанавливается HTTP-соединение.

После этого консольный терминал предложит ввести содержимое HTTP-запроса:

    

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

    

Полученный ответ удаленного сервера сообщает, что запрашиваемый сайт навсегда переехал на адрес протокола HTTPS.

Опции Telnet

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

Все опции представлены в виде флагов, которые указываются вместе с символом минуса (дефиса). Некоторые опции требуют указания дополнительного параметра после.

-4

Опция явно показывает Telnet, что для подключения используется IP-адрес типа IPv4:

    

-6 

Опция явно показывает Telnet, что для подключения используется IP-адрес типа IPv6:

    

При этом важно убедиться в том, что прослушивающий сервер (например, telnetd) поддерживает работу с IPv6-адресами.

-8

Опция предписывает Telnet использовать для передачи 8-битный тип данных:

    

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

-e

Опция устанавливает горячую клавишу выхода — так называемую escape-последовательность (или символ).

Если запустить без явного указания escape-последовательности:

    

— то в консоли появится информационное сообщение о статусе подключения:

    

В нем можно заметить такую строчку:

    

По умолчанию escape-последовательность выглядит так:

    

Это означает, что при нажатии сочетания клавиш Ctrl + ] в активном консольном терминале удаленной машины Telnet отключится от нее и перейдет в свой терминал, который обычно открывается после ввода команды вызова утилиты:

    

После этого можно выйти из терминала Telnet, оказавшись в стандартном консольном терминале локальной машины:

    

Соответственно, сочетание клавиш выхода можно изменить:

    

В этом случае отключение от удаленной машины будет выполняться после одновременного нажатия клавиш Ctrl + P.

Если перед символом клавиши не указывать символ циркумфлекса (^), тогда Telnet будет реагировать на нажатие только указанной клавиши без учета Ctrl:

    

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

Однако в этом случае нужно быть осторожным — если вводимые имя пользователя или пароль (даже если они копируются, а не печатаются на клавиатуре) содержат указанный одиночный символ (например, квадратную скобку ]), то Telnet на него среагирует и оборвет соединение с удаленным хостом еще на этапе авторизации.

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

Например, если в качестве escape-символа указать строчную букву t:

    

— то Telnet оборвет соединение в момент ввода последнего символа имени пользователя root:

    

-E

Сочетание горячих клавиш для выхода (escape-последовательность) можно полностью отключить:

    

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

    

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

    

После этого выйти из консольного терминала удаленной машины (например, если она работает на Ubuntu) можно только с помощью явной команды выхода:

    

-l

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

    

Ввода имени пользователя можно можно избежать, явно указав его в команде:

    

В этом случае консольный терминал сразу попросит ввести пароль от учетной записи указанного пользователя:

    

-a

В операционных системах Linux есть переменная окружения USER, содержащая имя пользователя, который использует систему в данный момент:

    

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

    

Это имя можно передать в Telnet для автоматической авторизации:

    

После этого Telnet возьмет необходимое имя из переменной окружения USER и попросит ввести только пароль:

    

Команды Telnet

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

Команды Telnet можно вводить только в его собственном терминале:

    

После этого перед активная строка консольного терминала будет иметь такую надпись:

    

Чтобы посмотреть описание конкретной команды, необходимо ввести знак вопроса перед ее названием:

    

Чтобы посмотреть справку о конкретной команде, необходимо ввести знак вопроса после ее названия:

    

OPEN

Устанавливает соединение с хостом на основе его IP-адреса и порта:

    

После этого в консольном терминале появится уже знакомое предложение ввести имя пользователя:

    

Можно запросить дополнительную справку о команде:

    

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

    

Как можно заметить, с этой командой можно использовать опцию -l, которая позволяет явно указать имя пользователя перед авторизацией:

    

Короткое описание команды можно прочитать следующим образом:

    

В этом случае в консольном терминале появится такой вывод:

    

CLOSE

Закрывает открытое соединение с хостом:

    

Эта команда не используется во время работы с терминалом удаленного хоста. Обычно она актуальна при подключении к системам другого типа.

LOGOUT

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

    

STATUS

Выводит состояние текущего соединения:

    

MODE

Переключает режимы работы с удаленным хостом.

Например, так можно активировать построчный режим:

    

А так посимвольный:

    

Разверните свой Linux VDS в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Будучи предшественником SSH, протокол Telnet не обладает достаточно высокой безопасностью — он не использует те методы шифрования, которые являются стандартными для SSH.

Тем не менее Telnet до сих пор актуален в частных задачах. Поэтому стоит знать основы работы с ним.

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

Исчерпывающую информацию (хотя из без достойных примеров) можно найти в документации по протоколу (утилите) Telnet.

9348
12 минут чтения
Средний рейтинг статьи: 2.4
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server