专栏首页运维部落Telnet必知必会

Telnet必知必会

  • Telnet 发展史
  • Telnet和SSH的区别(图)
  • Telnet使用
    • Telnet数据包分析
    • Telnet四种工作模式
    • telnet的工作过程
    • 为什么说telnet的效率不高?

Telnet 发展史

Telnet在计算机普及和网络全球化的过程中扮演了重要角色。

早期计算机并没有考虑网络互联的场景,在很长一段时间,计算机作为昂贵的资源只在军方和高校使用。因为能用的起电脑的国家和机构少之再少,因此,大家的通信也非常简单,简单的交换机甚至直连,更没有DNS的说法。同时也因为大家“知根知底”,因此早期的计算机的通信是使用明文通信,但随着计算机资源的逐渐普及,黑客,极客等各类角色出现,通信安全也逐渐被提上课题且日渐重要。Telnet的明文通信也逐渐被OPENSSH安全通信取代。但无论如何,Telnet在计算机发展史上的浓墨一笔值得被铭记。

Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用Telnet程序,用它连接到服务器。终端使用者可以在Telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的 能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法.

但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的.

telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问. telnet监听在23号端口,基于C/S架构,明文传输,于1969年被开发出来。互联网工程任务组(IETF),在STD 8中,将其加以标准化,是最早形成的互联网协议之一禁止管理员直接登录,支持su切换。

CentOS 6下使用xinetd管理守护进程。CentOS下统一将由systemd管理。

Telnet和SSH的区别(图)

telnet与ssh

Telnet使用

  • 安装telnet
yum  -y install telnet-server
  • 启动telnet服务
[%6%root@DS128 ~]# systemctl start telnet.socket
[%7%root@DS128 ~]# ss -tnl | grep 23
LISTEN     0      128         :::23                      :::*
[%8%root@DS128 ~]# ss -tnlp | grep 23 # -p选项查看23号端口由systemd协助监听
LISTEN     0      128         :::23                      :::*                   users:(("systemd",pid=1,fd=27))
  • 命令参数:
-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S<服务类型> 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X<认证形态> 关闭指定的认证形态。

Telnet数据包分析

tcpdump -i eno16777736 -p tcp port 23 -w telnet-test.cap

抓取telnet的包,在本地使用wireshark打开并分析该数据包,会发现 每击打键盘一次,就发送一个数据包,所以登录名stanley就发送了7个数据包(最少是7个数据包,每次服务器还需要有回应确认该数据包已收到);具体可以参考下面的图或大家自行抓包查看

Telnet四种工作模式

  • 半双工

客户端在接收用户输入之前,必须从服务器进程获得GO AHEAD (G A)命令. 现在已很少使用.

  • 一次一个字符

客户端把用户输入的每个字符都单独发送给服务器,服务器回显字符给客户端. 是目前大多数Telnet程序的默认方式. SUPPRESS GO AHEAD选项和ECHO选项必须同时有效.

  • 准行方式(kludge line mode)

用户每键入一行信息,客户端向服务器发送一次. 当上面两个选项其中之一无效时采用此模式.

  • 行方式

类似准行方式,纠正了准行方式的缺点. 较新的Telnet程序支持这种方式

telnet的工作过程

使用Telnet协议进行远程登录时需要满足以下条件:

  1. 在本地计算机上必须装有包含Telnet协议的客户程序;
  2. 必须知道远程主机的Ip地址或域名;
  3. 必须知道登录标识与口令。

Telnet远程登录服务分为以下4个过程:

  1. 本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;
  2. 将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;
  3. 将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
  4. 最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。

为什么说telnet的效率不高?

telnet数据包流向

如图为Telnet中的数据流向

  1. 数据信息被用户从本地键盘键入并通过操作系统传到客户机程序;
  2. 客户机程序将其处理后返回操作系统,并由操作系统经过网络传送到远程机器;
  3. 远程操作系统将所接收数据传给服务器程序,并经服务器程序再次处理后返回到操作系统上的伪终端入口点;
  4. 最后,远程操作系统将数据传送到用户正在运行的应用程序,这便是一次完整的输入过程;

输出将按照同一通路从服务器传送到客户机。因为每一次的输入和输出,计算机将切换进程环境好几次,而且默认telnet是逐字节传输数据,这个开销非常昂贵。还好用户的键入速率并不算高,这个缺点我们仍然能够接受。因此,telnet的使用场景也很局限。基本上只是为了确定远端服务器是否开启目标端口时才会使用。

telnet的启动不是service telnet start这种方式。而是采用

chkconfig telnet on
service xinetd restart
ss –tnl | grep –w 23

xinted超级守护进程。主要维护不常用的服务,但频率不高,但如果一直监听在端口上占用资源,这对服务器的性能消耗多大,所以就有一个超级服务保姆,xinted就是起这个功能的,代为响应这些服务,当用户临时请求过来时,xinted就启动对应进程来响应服务。所以大多数时候,xinted就是起到这个功能,其它这些服务器对应超级守护进程,瞬时服务。

telnet因为是明文传输,所以不允许超级用户登录。所以只有使用telnet来登录。在整个登录过程中如果使用tcpdump会抓取到所有的明文登录用户名和密码信息。所以是非常不安全的。

本文分享自微信公众号 - 运维部落(linux178),作者:松鼠尚学堂

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SSH 工作原理

    SSH 全称(Secure Shell),是一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。

    运维部落
  • CA数字签名的由来

    上一次内容我们介绍了TLS加密原理,为什么要加密通信呢?是因为我们不希望我们的个人信息被明文传播,任何一个人只要截断我们的物理线路或者入侵到我们网络中,就能获取...

    运维部落
  • 进程通信原理

    全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情...

    运维部落
  • 【RL-TCPnet网络教程】第31章 Telnet远程登录基础知识

    本章节为大家讲解Telnet (Teletype Network) 的基础知识,方便后面章节的实战操作。

    armfly
  • Linux命令(56)——telnet命令

    telnet命令用于登录远程主机,是基于Telnet协议的远程登录程序,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都...

    Dabelv
  • 使用Python实现Telnet远程登录

    # -*- coding: utf-8 -*- import telnetlib '''Telnet远程登录:Windows客户端连接Linux服务...

    py3study
  • 在命令行窗口中看大片《星球大战》,太强了!

    这个网站需要telnet登录,telnet是个老古董程序了, 如果你用的是Windows 10 ,默认是关闭的,需要把它启用:

    编程范 源代码公司
  • [享学Netflix] 四十五、Ribbon服务器状态:ServerStats及其断路器原理

    –> 返回专栏总目录 <– 代码下载地址:https://github.com/f641385712/netflix-learning

    YourBatman
  • PHP合并数组的几种方法比较

    在7.0.20版本中,array_merge_recursive合并相同字符串索引的数组时,合并结果中会有相同的数字索引。

    俗可耐
  • 如何用云开发创建专属文件存储小程序?丨实战

    学习云开发也有段时日了,当时就想试试手,不过一直没有灵感。直到有一次同学问我有没有老师发过的某个ppt,我说你怎么不去翻聊天记录呢?他说太麻烦,而且聊天记录中的...

    腾讯云开发TCB

扫码关注云+社区

领取腾讯云代金券