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
yum -y install telnet-server
[%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<认证形态> 关闭指定的认证形态。
tcpdump -i eno16777736 -p tcp port 23 -w telnet-test.cap
抓取telnet的包,在本地使用wireshark打开并分析该数据包,会发现 每击打键盘一次,就发送一个数据包,所以登录名stanley就发送了7个数据包(最少是7个数据包,每次服务器还需要有回应确认该数据包已收到);具体可以参考下面的图或大家自行抓包查看
客户端在接收用户输入之前,必须从服务器进程获得GO AHEAD (G A)命令. 现在已很少使用.
客户端把用户输入的每个字符都单独发送给服务器,服务器回显字符给客户端. 是目前大多数Telnet程序的默认方式. SUPPRESS GO AHEAD选项和ECHO选项必须同时有效.
用户每键入一行信息,客户端向服务器发送一次. 当上面两个选项其中之一无效时采用此模式.
类似准行方式,纠正了准行方式的缺点. 较新的Telnet程序支持这种方式
使用Telnet协议进行远程登录时需要满足以下条件:
Telnet远程登录服务分为以下4个过程:
telnet数据包流向
如图为Telnet中的数据流向
输出将按照同一通路从服务器传送到客户机。因为每一次的输入和输出,计算机将切换进程环境好几次,而且默认telnet是逐字节传输数据,这个开销非常昂贵。还好用户的键入速率并不算高,这个缺点我们仍然能够接受。因此,telnet的使用场景也很局限。基本上只是为了确定远端服务器是否开启目标端口时才会使用。
telnet
的启动不是service telnet start
这种方式。而是采用
chkconfig telnet on
service xinetd restart
ss –tnl | grep –w 23
xinted
超级守护进程。主要维护不常用的服务,但频率不高,但如果一直监听在端口上占用资源,这对服务器的性能消耗多大,所以就有一个超级服务保姆,xinted
就是起这个功能的,代为响应这些服务,当用户临时请求过来时,xinted就启动对应进程来响应服务。所以大多数时候,xinted
就是起到这个功能,其它这些服务器对应超级守护进程,瞬时服务。
telnet因为是明文传输,所以不允许超级用户登录。所以只有使用telnet来登录。在整个登录过程中如果使用tcpdump会抓取到所有的明文登录用户名和密码信息。所以是非常不安全的。