第四节 远程登录

为使远程交互服务普遍化,可允许用户在远程机器上建立一个登录会话,然后执行命令来实现,即使用远程登录措施。
好处:用户可访问远程系统上所有可用的命令;系统设计员不需提供多个专用的服务器。
需构造用于大多数操作系统的远程登录服务器软件和客户应用软件。
7.4.1 远程登录TELNET协议——是一个简单的远程终端协议
功能:用户可以用TELNET在其所在地通过TCP连接注册(即登录)到远地的另一个主机上(使用主机名或IP地址),TELNET能把用户的击键传到远地主机,同时也能把远地主机的输出通过TCP连接返回到用户屏幕。
特点:这种服务是透明的,用户感觉到好象键盘和显示器是直接连在远地主机上。
三种基本服务:
定义一个网络虚拟终端,为远程系统提供一个标准接口,客户程序不必详细了解所有可能的远程系统,只需构造使用标准接口的程序。
包括一个允许客户和服务器协商选项的机制,而且还提供一组标准选项(如,选项之一控制着通过连接传输的数据是使用标准7位ASCII字符集还是8位字符集)。
对称处理连接的两端(即不强迫客户从键盘输入,也不强迫客户在屏幕上显示输出),任意程序都可称为客户,任何一端都可发起协商选项。
TELNET终端与服务器的数据通路:
伪终端:用来描述操作系统入口点,允许TELNET服务器之类的运行程序向操作系统传输字符,并使用字符似乎来自本地键盘。操作系统只有提
供伪终端这种措施才能构造一个TELNET服务器!将TELNET服务器安排为应用层程序的优缺点:
优点:比把代码嵌入操作系统更易修改和控制服务器。
缺点:效率不高。

键入的信息从用户键盘通过操作系统传到客户程序
|
再从客户程序返回操作系统
|
通过互联网传到服务器机器
|
到达目的主机后,数据通过操作系统向上传给服务器应用程序
|
再从服务器应用程序返回到服务器的操作系统上的伪终端入口点
|
远程操作系统将字符传给用户正运行的应用程序
|
同时,输出按照同一通路从服务器回送到客户

7.4.2 适应异构性
网络虚拟终端NVT(Network virtual Terminal):为适应异构环境,TELNET定义的在Internet上传输数据和命令序列的方式。
实现过程: 客户软件把来自用户终端的按键和命令序列转换为NVT格式

发送到服务器
|
服务器软件将收到的数据和命令
|
从NVT格式转换为远程系统需要的格式

网络虚拟终端NVT格式——所有通信都涉及的是8比特字节
在启动时:

US-ASCII字符集:包括95个可打印字符(包括字母、数字和标点符号)和33个控制码。
NVT标准行结束字符:为两字符的CR-LF序列。
当用户按下本地终端上对应行结束(end-of-line)的一个键时(如Enter或Return键),TELNET客户必须将它映射为CR-LF两字符序列用作传输,TELNET服务器将CR-LF转换为适于远程机器的字符序列。

7.4.2 控制传输远程命令
多个控制功能的实现:TELNET NVT客户除从用户那里接受数据外还接受控制功能,并将它们传输到必须解释它们的服务器系统。
从概念上讲,把NVT看作可接受可以产生超过128个字符的键盘的输入,并假定用户键盘上有典型的用于控制功能的虚拟键(想象的键)。

信令
意义
IP
中断进程tIntemipt Process,终止运行的程序)
AO
终止输出〔Abort Output,放弃任何已缓冲的输出〕
AYT
你在那里吗〔Are You There?测试服务器是杏响应〕
EC
删除字符(Erase Character,删除前一字符)
EL
删除行( Erase Line,删除整个当前行)
SYNCH
同步(Synchronous)(清除数据路径,直到TCP紧急数据点,俗不解释命令)
BRK
中断(Break,中断键或注意信号)

实际上,大多数键盘不提供额外的命令键,而是由各个操作系统或命令解释器用不同的方法产生它们。
最常用的技术:将特殊的ASCII字符与控制功能相联系,以便在用户按下此键时,操作系统将来取相应的动作,而不是将该字符作为输入。
使命令与正常ASCII字符集分开有两个原因:
第一,分开定义控制功能意味着TELNET具有更大的灵活性,它可在客户和服务器间传输所有可能的ASCII字符以及所有可能的控制功能;
第二,通过将信令与普通数据分开,NVT使得客户能够无二义性地指定信令,不可能发生无法确定输人字符是数据还是控制功能的混乱情况。
转义序列(escape sequence):用一个保留八位组,指示下一个八位组将是一个控制码,目的是使TELNET用它对控制功能进行编码,从而在TCP连接上传递控制功能。
按命令解释IAC(Interpret As Command)八位组:在TELNET中开始一个转义序列的保留八位组。

命令
十进制编码
含义
IAC
255
下一个八位组解释为命令(当IAC八位组作为数据出现时,发送方将其复制,并发送两个八位组序列IAC-IAC)
DONT
254
拒绝执行指定选顶的请求
DO
253
同意提供指定的选项
WONT
252
拒绝执行指定的选项
WILL
251
同意执行指定的选项
SB
250
开始选项子协商(subnegotiation)
GA
249
“继续”,信令(Go Ahead)
EL
248
“删除行”信令(Erase Line)
EC
247
“删除字符”信令(Erase Character)
AYT
246
“你在那里吗”信令(Are You There)
AO
245
“终止输出”信令(Abort Output)
IP
244
“中断进程”信令(Interrupt Process)
BRK
243
“中断”信令(Break)
DMARK
242
SYNCH的数据流部分(总是伴随着TCP紧急通告)
NOP
241
无操作(No Operation)
SE
240
选项子协商结束
EOR
239
记录结束(End Of Record)

 

与普通数据一起发送控制功能并不总能保证得到正确的结果,通常只有当远程机器上的运行程序出错或用户希望终止程序时才需要发送中断进程控制!
例如:

服务器的应用程序停止读取输入,操作系统的缓冲区最终会满,服务器也不能将更多数据写入伪终端;
|
一旦发生此事,服务器必须停止从TCP连接读取数据,从而使TCP连接的缓冲区变满;
|
最后服务器所在机器上的TCP将接收窗口大小通告为零,从而阻止数据从此连接流入;
|
若用户此时生成一个终端控制功能,如形成命令序列IAC IP并写入到TCP连接,但由于TCP已停止把数据发送到服务器机器,服务器将不能读到这个控制序列。

由于需要得到控制而又发生错误的应用程序可能无意中阻塞数据流,TELNET不能单独依靠客户和服务器间常规的数据流传输控制序列。
解决:必须使用带外信令!
实现:TCP用紧急数据机制实现带外数据信令。
紧急数据机制:

TELNET(只要)在数据流中放入了控制功能
|
发送一个SYNCH信令
|
TELNET再附加一个称为数据标记(data mark)的保留八位组
|
通过让TCP发送已设置紧急数据比特的报文段通知服务器
|
携带紧急数据的报文段将绕过流量控制直接到达服务器
|
作为对紧急信令的响应,服务器读取并抛弃所有数据,直到找到该数据标记
|
服务器在遇到数据标记后返回正常处理过程

7.4.4 TELNET选项
TELNET选项是可协商的,使得客户和服务器可以重新配置其连接!
例如:客户和服务器通过协商选项,可以在彼此之间传递8比特的数据(当传递8比特的数据时,如果保留八位组IAC出现在数据中仍需使用两个)。
TELNET选项的范围很广:一些选项扩充了大方向的功能,一些选项只涉及一些微小细节。

名字
代码
RFC
含义
传输二进制
0
856
将传输改为8比特二进制
回送
1
857
允许一端对收到的数据进行回送
抑制GA
3
858
在数据后面抑制(不再发送)GA(继续)信令
状态
5
859
从远程网点请求获取一个TELNET选项的状态
定时标记
6
860
请求在返回数据流中插入定时标记来同步一个连接的两端
终端类型
24
884
交换关于所用终端的厂商和型号的信息(允许程序修改输出,如用户终端的光标定位序列)
记录结束
25
885
用EOR代码终止数据发送
行模式
34
1116
在本地编辑并发送完整的行,而不是发送单个字符

TELNET协商选项的方式:使用一种对称选项协商机制,允许任何一端发出申请,接收端可以做出肯定接受的响应或拒绝请求,允许客户和服务器重新配置控制其交互的参数。
TELNET术语:
请求:WILL X——“你是否同意我使用选项X”;
响应:DO X或DON’T X——“我同意你使用选项X”或“我不同意你使用选项X”;
WILL X或WON’T X ——“我将开始使用选项X” 或“我不会使用选项 X”。
两端可能都认为对方的确认是请求,为避免引起循环,协议规定不用确认对已在使用的选项的协商请求。
几种情况:
当一端试图协商另一端不了解的选项时,接收请求的一端可简单地拒绝协商;
——可使更新、更复杂的客户服务器版本与较老的、不太复杂的版本进行互操作
若客户和服务器都理解新的选项,则可能会对交互有所改善,否则,将一同转入效率较低但可工作的运行方式;
由于所有TELNET软件理解基本的NVT协议,即使客户和服务器中有一方理解选项而另一方不理解,它们之间也能互操作。
7.4.5 远程登录服务rlogin(源于BSD UNIX的操作系统)
远程登录服务rlogin:支持受信任的主机,允许系统管理员选择一组机器,在这些机器上共享登录名和文件访问保护,并在登录用户间建立等价关系。
作用:用户通过为基于远程主机的远程登录和远程用户名授权,可控制对其用户账号的访问。
rash命令:是rlogin命令的一个变形,它调用远程UNIX机器上的命令解释器,并把命令行参数传递到命令解释器,完全跳过了登录的步骤。
rsh命令调用的格式: rsh machine command
例如:用户在任一台机器上键入 :rsh merlin ps,都将执行机器merlin上的ps命令,该机器上UNIX的标准输入和输出通过网络连接到用户的键盘和显示器,用户查看输出就像自己登录到机器merlin中一样。
由于用户可设法使rsh调用远程命令而不需要键入口令,该命令既可在程序中使用,也可从键盘输入。