<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако

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

Миша Курушин
Миша Курушин
Технический писатель
10 декабря 2024 г.
68
12 минут чтения
Средний рейтинг статьи: 5

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 для управления удаленными хостами.

vds

Использование 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
Разверните свой Linux VDS в Timeweb Cloud

Заключение

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

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

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

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
10 декабря 2024 г.
68
12 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев