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 -q
Если Telnet действительно есть в системе, то в консольном терминале появится вывод с сообщением об ошибке и короткой справкой о возможных опциях команды:
telnet: invalid option -- 'q'
Usage: telnet [-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user]
[-n tracefile] [ -b addr ] [-r] [host-name [port]]
Если же в консольном терминале появился примерно такой вывод:
-bash: /usr/bin/telnet: No such file or directory
Или такой:
telnet: command not found
Try: apt install <deb name>
Тогда утилиту Telnet необходимо загрузить и установить вручную с помощью пакетного менеджера APT:
sudo apt install telnet
После этого можно переходить к использованию протокола Telnet для управления удаленными хостами.
❯ Использование Telnet
Установление связи с удаленной машиной с помощью утилиты Telnet не требует ввода сложных команд и во многом напоминает работу с SSH.
Схема консольной команды выглядит так:
telnet [ОПЦИИ] [IP-АДРЕС] [ПОРТ]
Здесь задаются три основных типа параметров для соединения с удаленной машиной:
IP-АДРЕС. Либо IP-адрес (IPv4 или IPv4), либо домен удаленной машины, к которой выполняется подключение.
ПОРТ. Открытый порт на удаленной машине, по которому выполняется подключение. По умолчанию Telnet прослушивает подключения на 23 порту.
ОПЦИИ. Дополнительные флаги с параметрами, которые уточняют нюансы подключения.
Особое внимание стоит уделить небольшому списку возможных опций в Telnet, каждая из которых выполняет свою определенную функцию:
-4 |
Использовать IPv4-адрес во время подключения |
-6 |
Использовать IPv6-адрес во время подключения |
-8 |
Использовать 8-битную кодировку при отправке данных |
-e |
Изменить горячую клавишу отсоединения (escape-последовательность) |
-E |
Отключить горячую клавишу отсоединения (escape-последовательность) |
-l |
Указать явно имя пользователя для авторизации на удаленной машине |
-a |
Использовать имя пользователя для авторизации на удаленной машине из переменной окружения USER |
Таким образом, настоящая команда подключения через Telnet может выглядеть следующим образом:
telnet -4 194.87.118.235 23
В этом случае мы указали:
Опцию -4, сообщающую об использовании IP-адреса типа IPv4.
Сам IP-адрес удаленной машины.
Стандартный 23 порт, на котором удаленный сервер прослушивает Telnet-подключения.
При этом параметры по умолчанию можно не указывать явно, упрощая команду до вида:
telnet 194.87.118.235
После установки соединения с удаленным хостом Telnet может работать в двух режимах:
Построчный (по умолчанию). Команды и данные вводятся посимвольно, но отправляются на удаленный сервер построчно. Поэтому перед отправкой команды всегда можно исправить возможную ошибку ввода.
Посимвольный. Команды и данные вводятся посимвольно и отправляются на удаленный сервер тоже посимвольно. В этом случае любую возможную ошибку ввода исправить невозможно.
Управление удаленной машиной выполняется с помощью набора команд. В этом руководстве мы рассмотрим лишь основные из них:
OPEN |
Подключиться к удаленной машине |
CLOSE |
Отключиться от удаленной машины |
LOGOUT |
Отключить от удаленной машины и выйти из Telnet |
STATUS |
Проверить статус соединения с удаленной машиной |
MODE |
Переключиться между построчным и посимвольным режимами |
Соединение с локальным хостом
Самый простой способ проверить работоспособность Telnet — подключиться к локальному хосту:
telnet localhost
Как правило, после выполнения этой команды возникает ошибка:
Trying ::1...
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Это связано с тем, что на локальной машине не установлена служба Telnet — сервер (демон), прослушивающий 23 порт (по умолчанию) и обрабатывающий подключения.
Установить его можно через пакетный менеджер APT:
sudo apt install telnetd -y
Обратите внимание на букву «d» после слова «telnet» — это не описка! Флаг -y автоматически положительно отвечает на вопросы во время установки.
После этого можно повторить попытку подключения к локальному хосту:
telnet localhost
В консольном терминале появится вывод, содержащий информацию о статусе подключения и требование ввести имя пользователя, под которым необходимо выполнить авторизацию на удаленной машине:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Ubuntu 22.04.5 LTS
3833269-yn55665 login:
Для тестирования возможностей Telnet можно авторизоваться под пользователем root.
После этого консольный терминал потребует ввести пароль указанного пользователя:
Password:
После успешной авторизации все введенные команды будут выполняться на удаленной машине.
Например, сразу подключения можно выйти из консольного терминала удаленного хоста:
exit
В консольном терминале локальной машины появится сообщение о закрытии соединения:
logout
Connection closed by foreign host.
При этом консольный ввод имени пользователя можно пропустить, заранее указав его с помощью опции -l:
telnet -l root localhost
В этом случае в консольном терминале появится информация о состоянии подключения и предложение сразу ввести пароль:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Password:
Выполнение HTTP-запроса к удаленному хосту
Еще один вариант использования Telnet — выполнение HTTP-запросов к удаленным серверам.
Например, таким образом можно загрузить содержимое главной страницы произвольного сайта:
telnet timeweb.cloud 80
Обратите внимание, что в команде был явно указан 80 порт, через который по умолчанию устанавливается HTTP-соединение.
После этого консольный терминал предложит ввести содержимое HTTP-запроса:
GET / HTTP/1.0
Host: timeweb.cloud
После его отправки в консольном терминале появится вывод, содержащий ответ удаленного сервера и информационное сообщение о закрытии соединения:
HTTP/1.1 301 Moved Permanently
Server: QRATOR
Date: Sun, 01 Dec 2024 19:02:03 GMT
Content-Length: 0
Connection: close
location: https://timeweb.cloud/
Connection closed by foreign host.
Полученный ответ удаленного сервера сообщает, что запрашиваемый сайт навсегда переехал на адрес протокола HTTPS.
❯ Опции Telnet
При использовании Telnet можно указывать дополнительные опции, уточняющие механизм соединение с удаленной машиной.
Все опции представлены в виде флагов, которые указываются вместе с символом минуса (дефиса). Некоторые опции требуют указания дополнительного параметра после.
-4
Опция явно показывает Telnet, что для подключения используется IP-адрес типа IPv4:
telnet -4 194.87.118.235
-6
Опция явно показывает Telnet, что для подключения используется IP-адрес типа IPv6:
telnet -6 2a03:6f00:a::4ca1
При этом важно убедиться в том, что прослушивающий сервер (например, telnetd) поддерживает работу с IPv6-адресами.
-8
Опция предписывает Telnet использовать для передачи 8-битный тип данных:
telnet -8 194.87.118.235
Сегодня эту опцию можно считать неактуальной, т.к. современные машины поддерживают большую битность при передачи данных.
-e
Опция устанавливает горячую клавишу выхода — так называемую escape-последовательность (или символ).
Если запустить без явного указания escape-последовательности:
telnet 194.87.118.235
— то в консоли появится информационное сообщение о статусе подключения:
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is '^]'.
Ubuntu 22.04.5 LTS
3833269-yn55665 login:
В нем можно заметить такую строчку:
Escape character is '^]'.
По умолчанию escape-последовательность выглядит так:
^]
Это означает, что при нажатии сочетания клавиш Ctrl + ] в активном консольном терминале удаленной машины Telnet отключится от нее и перейдет в свой терминал, который обычно открывается после ввода команды вызова утилиты:
telnet
После этого можно выйти из терминала Telnet, оказавшись в стандартном консольном терминале локальной машины:
quit
Соответственно, сочетание клавиш выхода можно изменить:
telnet -e ^P 194.87.118.235
В этом случае отключение от удаленной машины будет выполняться после одновременного нажатия клавиш Ctrl + P.
Если перед символом клавиши не указывать символ циркумфлекса (^), тогда Telnet будет реагировать на нажатие только указанной клавиши без учета Ctrl:
telnet -e ] 194.87.118.235
В этом случае отключиться от удаленной машины можно будет с помощью одиночного нажатия клавиши с буквой Ъ.
Однако в этом случае нужно быть осторожным — если вводимые имя пользователя или пароль (даже если они копируются, а не печатаются на клавиатуре) содержат указанный одиночный символ (например, квадратную скобку ]), то Telnet на него среагирует и оборвет соединение с удаленным хостом еще на этапе авторизации.
Впрочем, то же самое касается ввода символов в качеств управляющих команд в удаленный терминал уже после авторизации.
Например, если в качестве escape-символа указать строчную букву t:
telnet -e t 194.87.118.235
— то Telnet оборвет соединение в момент ввода последнего символа имени пользователя root:
root@3833269-yn55665:~# telnet -e t 194.87.118.235
Telnet escape character is 't'.
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is 't'.
Ubuntu 22.04.5 LTS
3833269-yn55665 login:
-E
Сочетание горячих клавиш для выхода (escape-последовательность) можно полностью отключить:
telnet -E 194.87.118.235
После этого в консольном терминале появится сообщение о статусе подключения:
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is 'off'.
Ubuntu 22.04.5 LTS
3833269-yn55665 login:
В нем будет соответствующая строчка, показывающая отсутствие escape-последовательности:
Escape character is 'off'.
После этого выйти из консольного терминала удаленной машины (например, если она работает на Ubuntu) можно только с помощью явной команды выхода:
exit
-l
При подключении через Telnet в консольном терминале появится требование ввести имя пользователя, под которым выполняется авторизация на удаленной машине:
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is 'off'.
Ubuntu 22.04.5 LTS
3833269-yn55665 login:
Ввода имени пользователя можно можно избежать, явно указав его в команде:
telnet -l root 194.87.118.235
В этом случае консольный терминал сразу попросит ввести пароль от учетной записи указанного пользователя:
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is '^]'.
Password:
-a
В операционных системах Linux есть переменная окружения USER, содержащая имя пользователя, который использует систему в данный момент:
echo $USER
В консольном терминале появится имя текущего пользователя:
root
Это имя можно передать в Telnet для автоматической авторизации:
telnet -a 194.87.118.235
После этого Telnet возьмет необходимое имя из переменной окружения USER и попросит ввести только пароль:
Trying 194.87.118.235...
Connected to 194.87.118.235.
Escape character is '^]'.
Password:
❯ Команды Telnet
В отличие от опций, команды представляют собой ключевые слова, после которых указываются дополнительные параметры.
Команды Telnet можно вводить только в его собственном терминале:
telnet
После этого перед активная строка консольного терминала будет иметь такую надпись:
telnet>
Чтобы посмотреть описание конкретной команды, необходимо ввести знак вопроса перед ее названием:
? команда
Чтобы посмотреть справку о конкретной команде, необходимо ввести знак вопроса после ее названия:
команда ?
OPEN
Устанавливает соединение с хостом на основе его IP-адреса и порта:
open localhost
После этого в консольном терминале появится уже знакомое предложение ввести имя пользователя:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Password:
Можно запросить дополнительную справку о команде:
open ?
После чего в консольном терминале появится схема команды со всеми возможными параметрами и опциями:
usage: open [-l user] [-a] host-name [port]
Как можно заметить, с этой командой можно использовать опцию -l, которая позволяет явно указать имя пользователя перед авторизацией:
open -l root localhost
Короткое описание команды можно прочитать следующим образом:
? open
В этом случае в консольном терминале появится такой вывод:
connect to a site
CLOSE
Закрывает открытое соединение с хостом:
close
Эта команда не используется во время работы с терминалом удаленного хоста. Обычно она актуальна при подключении к системам другого типа.
LOGOUT
Команда похожа на CLOSE, но работает несколько иначе. В отличие от самостоятельного закрытия соединения на стороне локальной машины, как в случае с CLOSE, эта команда заставляет удаленный хост закрыть соединение:
logout
STATUS
Выводит состояние текущего соединения:
status
MODE
Переключает режимы работы с удаленным хостом.
Например, так можно активировать построчный режим:
mode line
А так посимвольный:
mode character
❯ Заключение
Будучи предшественником SSH, протокол Telnet не обладает достаточно высокой безопасностью — он не использует те методы шифрования, которые являются стандартными для SSH.
Тем не менее Telnet до сих пор актуален в частных задачах. Поэтому стоит знать основы работы с ним.
Взаимодействие с Telnet основано на выполнении команд с указанием специфических опций. Таким образом можно выполнять подключения (запросы) к удаленным машинам по различным адресам и портам, а также выполнять консольные команды так, как если бы они запускались локально.
Исчерпывающую информацию (хотя из без достойных примеров) можно найти в документации по протоколу (утилите) Telnet.
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩

? Читайте также:
Комментарии (13)
MaxLevs
11.02.2025 14:43Как будто прочитал дешёвую драму.
Вы пишите, что SSH — для публичных сетей, тогда как Telnet — для частных. Это можно увидеть, например, в сравнительной табличке из вашей статьи.
| Специализация | Частные сети | Публичные сети |
Однако область применения SSH не ограничивается публичными сетями. Хотя бы потому, что защищённые сети — тоже неоднородные: вы явно не хотите, чтобы ваши сотрудники свободно ходили от машине к машине. Как минимум доступ должен быть выдан только для тех ресурсов, которые необходимы для выполнения должностных обязанностей. Это касается и машин в сети.
Лично я хотел бы прочитать про неумирающую актуальность Telnet, которая была так много раз упомянута за статью. Потому что лично мне ни разу не приходилось использовать Telnet ни для домашних потребностей, ни для профессиональных. А вот SSH — да. И да, я уверен, что кто-то где-то точно им пользуется! Но кто? И где? Вот это было бы интересно почитать, а не очередную man-кальку.
Тема
сисекактуальности не раскрыта!yds
11.02.2025 14:43Вот как раз сейчас разбираюсь с сетью, оставленной предшественником. Все управление, активным оборудованием, с помощью telnet. А SSH выключен везде.. Так что есть такие люди, которые им вовсю пользуются.
MaxLevs
11.02.2025 14:43Так я и не отрицаю. Наоборот, уверен, что так оно и есть.
Поэтому тема актуальности очень интересна.
AVX
11.02.2025 14:43Вот такого быть не должно. Во всех требованиях по безопасной настройки хостов (в т.ч. и сетевого оборудования) прописано обязательное отсутствие телнета, как клиента, так и сервера. Оборудование не умеет другого? - нафиг в мусор, меняем на другое. Сейчас время такое, безопасность должна быть на первом месте.
Я ещë могу понять, что для траблшутинга иногда это надо, но это как правило разовое дело, поставил, поработал, удалил.
CherryPah
11.02.2025 14:43Но кто?
Те кому приходится работать со старым железом. И эмбеддщикам
И где?
В телекоме сплошь и рядом. Сетевые железки живучи, неприхотливы, а на уровне доступа не так требовательны к ресурсам и новым технологиям. Поэтому встретить там какой-нить Alcatel-Lucent или каталист родом из прошлого тысячелетия - повод для удивления не более чем на полминуты.
А еще я телнетом порты в эрзац-режиме проверяю. Ну это дело привычки наверное уже.
checkpoint
11.02.2025 14:43Единственное для чего может быть полезен telnet в современном мире это отладка сетевых протоколов, но и в этом деле ему есть более убодная замена:
netcat
(akanc
).
litos
11.02.2025 14:43Мне кажется, статья была бы актуальной лет 10-15 назад, но время идёт вперёд и telnet везде, где только возможно, стоит заменить на ssh
telnet клиент имеет право на жизнь, проверять работу сети, писать в консоли telnet server 22 или telnet server 25, чтобы проверить ответ сетевого сервиса, но опять же есть netcat (nc) поэтому это дело привычки
vitaly_il1
11.02.2025 14:4310-15?
Скорее 25!unreal_undead2
11.02.2025 14:43А каких то лет тридцать назад и сервера с публичным telnet доступом были обычным делом...
damien
11.02.2025 14:43Я дико извиняюсь, но последние лет 10, использую телнет только в споре с владельцами систем, о том что сетевых ограничений нет, а проблема в самом сервисе. Если порт слушается, а страничка выдает 404 - по сети все ровно)
Shaman_RSHU
11.02.2025 14:43Статья должна называться "Использование команд Telnet в Linux/Unix в 2025 году не безопасно"
Для всего остального есть nc (netcat).
rmrfchik
Что означает, что цветной терминал не поддерживается? Телнету всё равно на терминал. Его задача прокинуть $TERM и не лезть в траффик (с определёнными оговорками).