标题：远程登录
详细信息
通过远程登录，本地计算机便能与网络上另一远程计算机取得“联系”，并进行程序交互。进行远程登录的用户叫做本地用户，本地用户登录进入的系统叫做远地系统。
每一个远程机器都有一个文件（/etc/hosts.equiv），包括了一个信任主机名集共享用户名的列表。本地用户名和远程用户名相同的用户，可以在 /etc/hosts.equiv 文件中列出的任何机器上登录到远程主机，而不需要密码口令。个人用户可以在主目录下设置相似的个人文件（通常叫 .rhosts）。此文件中的每一行都包含了两个名字 — 主机名和用户名，两者用空格分开。.rhosts 文件中的每一行允许一个登录到主机名的名为用户名的用户无需密码就可以登陆到远程主机。如果在远程机的 /etc/hosts.equiv 文件中找不到本地主机名，并且在远程用户的 .rhosts 文件中找不到本地用户名和主机名时，远程机就会提示密码。列在 /etc/hosts.equiv 和 .rhosts 文件中的主机名必须是列在主机数据库中的正式主机名，昵称均不许使用。为安全起见，.rhosts 文件必须归远程用户或根所有。 
远程终端类型和本地终端类型（在 TERM 变量环境中给定）相同。如果服务器支持，终端或窗口尺寸会被拷贝到远程系统中，同时大小的变化也能反映出来。所有的回声现象都发生在远程站点，以致于远程登录都是透明的（除了延迟情况）。流控制借助 <CTRL-S> 和 <CTRL-Q> 实现，并且输入输出中断也得到很好的处理。
远程登录的相关操作：
一、远程机上设置：
1、确保启动相应的服务项目。本来远程桌面需要的服务项目是默认开启的，但我自己以前曾经将系统服务减少以保证运行速度和安全。所以在此使用过程中发现了麻烦所在，尝试了半天，终于还是确认了需要开启以下服务项目才能进行远程登录。
若以下服务项目没开启的话，远程登录会提示以下信息：
“客服端无法连接到远程计算机。
连接可能没有启用，或者计算机太忙，无法接受新连接。也有可能网络问题使你无法连接。
请以后再试。如果问题继续出现，请跟系统管理员联系。”
出现以上提示的话，可以考虑下是否服务项目没启动的问题。
远程登录需要的服务项目：
Server
Terminal Services
Telnet
NT LM Security Support Provider（Telnet需要依存与此服务，因此需要先启动此服务）
2、取消防火墙对远程控制的限制。
防火墙会导致远程机登录本地机时连接超时的状况。
怎么设置防火墙？？自己搞哦。不行的话关闭了防火墙。哈哈。
3、添加远程登录桌面用户：
依次点击“开始——所有程序——管理工具——计算机管理”；
在系统工具中点击“本地用户和组”，双击右边的“用户”；
在右边空白处右击后选择“新用户”，在弹出的对话框中输入“用户名、全名、密码、确认密码”，其他的自己可以做设置。然后确定退出。
右击新建的用户名——属性——隶属于，在弹出的对话框中点“添加”——高级——立刻查找——选中名称为“Remote Desktop Users”，确定退出，这样就完成了远程登录帐户的设置。
4、开启远程登录设置：
右击我的电脑——属性——远程——远程桌面——在“允许用户远程连接到此计算机”前打勾。确定后即可在远程机上登录了。
二、本地机设置：
这个很简单拉。
依次打开“开始菜单——所有程序——附件——通讯——远程桌面连接”；
在打开的对话框中点击“选项”，计算机上填入要登录的主机的IP地址，还有刚才设置的用户名和密码，在“高级”选项中设置网络类型来优化设置，然后点击“连接”就行了。
写完这篇，似乎会有一个安全性的问题，即使你设置了远程登录密码。但也有被破解的可能性存在。
所以，若你暂时不使用远程登录的话，可以将设置的帐号禁用，禁用刚才提到的服务项目即可。
命令
rlogin 的安全版本 slogin 和另外两个 UNIX 工具 ssh 、scp 都属于 Secure Shell suite，这是一个用于替代早期工具的界面和协议。 
协议结构 
rlogin 命令是：rlogin [-8EL] [-ec ] [-l 用户名] 主机名可选标记 
可选标记： 
-8EL 总是支持8位数据路径，除非开始字符和停止字符不是 Ctrl-S 和 Ctrl-Q，否则 Rlogin 命令使用7位数据路径，去除校验位。 
-e Character 改变换码符。替换为 Character 选择的字符。 
-f 引起认证（Credentials）转发。如果当前不是采用的 Kerberos 5认证方法，该标记就会被忽略。如果当前认证没有标记为可转发，将导致认证失败。 
-F 引起认证（Credentials）转发。另外远程系统上的认证被标记为可转发（允许它们传送到另一个远程系统上）。如果当前认证没有标记为可转发，将导致认证失败。 
-k realm 如果远程站领域与本地系统领域不同，那么允许用户指定远程站的领域。为达到该目的，领域与DCE信元同义。如果当前不是采用的 Kerberos 5认证方法，该标记就会被忽略。 
-l User 将远程用户名改为你所指定的名字。否则将你的本地用户名应用于远程主机。 
主机名–建立远程登录会话的远程机器 
远程登录是Internet上较早提供的服务。用户通过Telnet命令使自己的计算机暂时成为远地计算机的终端，直接调用远地计算机的资源和服务。利用远程登录，用户可以实时使用远地计算机上对外开放的全部资源，可以查询数据库、检索资料，或利用远程计算完成只有巨型机才能做的工作。此外， Internet的许多服务是通过Telnet访问来实现的。
与远程计算机连接后，可实现资源共享。
软件方式实现远程登录
目前鉴于用户对于远程登录的需求和用户偏于应用型的特征，很多软件公司研发了远程共享和远程控制软件来实现远程登录，比如像国外的Mikogo，Teamviewer，Netviewer、pcanywhere,以及国内的网络人远程控制软件、花生壳等，而Windows系统远程桌面也能实现相似的操作。
通过软件方式实现远程登录，首先需要安装远程登录软件，多数情况需要两个甚至多个终端同时安装。其次，正常情况下服务器可以做到24小时工作，但常常禁止安装此类远程控制软件，这就意味着可能在利用软件进行远程登录公司服务器的时候需要同时开启两台机器和一台服务器，所以常常在移动办公中，需要同时开启公司电脑以作为中转，通过远程操控公司电脑实现远程登录。现在远程控制软件已经日渐专业化、品牌化，在操作性和安全性方面都有很大的进步，网络人等远程控制还采用U盾加密来保护远程控制的安全。使用软件进行登录的优点就是简单易学，操作方便，体积小，绿色，响应速度快，画质清晰等特点，比如像Mikogo本身只有1.6MB, 国产的网络人远程控制软件也只是1M左右，适用于着重应用的用户。
远程登录逐渐被人们认识和广泛地应用于学习，工作和生活中，更多、更方便的远程登录方式也会慢慢丰富市场，满足各种不同阶层、不同目的的用户需求。
应用进程的启动
Rlogin的客户进程和服务器进程使用一个TCP连接。当普通的TCP连接建立完毕之后，客户进程和服务器进程之间将发生下面所述的动作。
1)客户进程给服务器进程发送4个字符串：（a）一个字节的0；(b）用户登录进客户进程主机的登录名，以一个字节的0结束；（c）登录服务器进程端主机的登录名，以一个字节的0结束；（d）用户终端类型名，紧跟一个正斜杠“/”，然后是终端速率，以一个字节的0结束。在这里需要两个登录名字，这是因为用户登录客户和服务器的名称有可能不一样。由于大多满屏应用程序需要知道终端类型，所以终端类型也必须发送到服务器进程。发送终端速率的原因是因为有些应用随着速率的改变，它的操作也有所变化。例如vi编辑器，当速率比较小的时候，它的工作窗口也变小。所以它不能永远保持同样大小的窗口。
2)服务器进程返回一个字节的0。
3)服务器进程可以选择是否要求用户输入口令。这个步骤的数据交互没有什么非凡的协议，而被当作是普通的数据进行传输。服务器进程给客户进程发送一个字符串（显示在客户进程的屏幕上），通常是passWord:。假如在一定的限定时间内（通常是60秒）客户进程没有输入口令，服务器进程将关闭该连接。通常可以在服务器进程的主目录(homeDirectory)下生成一个文件（通常叫.rhosts），该文件的某些行记录了一个主机名和用户名。假如从该文件中已经记录的主机上用已经记录的用户名进行登录，服务器进程将不提示我们输入口令。但是很多关于安全性的文献，如[Curry1992]，强烈建议不要采用这种方法，因为这存在安全漏洞。假如提示输入口令，那么我们输入的口令将以明文的形式发送到服务器进程。我们所键入的每个字符都是以明文的格式传输的。所以某人只要能够截取网络上的原始传输的分组，他就可以截获用户口令。针对这个问题，新版本的Rlogin客户程序，例如
4.4BSD版本的客户程序，第一次采用了Kerberos安全模型。Kerberos安全模型可以避免用户口令以明文的形式在网络上传输。当然，这要求服务器进程也支持Kerberos
（[Curry1992]具体描述了Kerberos安全模型）。4)服务器进程通常要给客户进程发送请求，询问终端的窗口大小（将在后面解释）。客户进程每次给服务器进程发送一个字节的内容，并且接收服务器进程的所有返回信息。
同样我们也采用了Nagle算法（在19.4节中曾经介绍），该算法可以保证在速率较低的网络上，若干输入字节以单个TCP报文段传输。操作其实很简单：用户键入的所有东西被发送到服务器，服务器发送给客户的任何信息返回到用户的屏幕上。
另外，服务器和客户之间还可以互相发送命令。在介绍这些命令之前，先介绍需要用到这些命令。
流量控制
默认情况下，流量控制是由Rlogin的客户进程完成的。客户进程能够识别用户键入的STOP和START的ASCII字符（ControlS和ControlQ），并且终止或启动终端的输出。
假如不是这样，每次我们为终止终端输出而键入的Control_S字符将沿网络传输到服务器进程，这时服务器进程将停止往网络上写数据。但是在写操作终止之前，服务器进程可能已经往网络上写了一窗口的输出数据。也就是说，在输出停止之前，成千上万的数据字节还将在屏幕上显示。图26-3显示了这个情况。
服务器进程执行STOP/START的情况
客户的中断键
当我们为中断服务器正在运行的进程而键入一个中断字符时（通常是DELETE或Control_C），会发生和流量控制相同的问题。这个情况和图26-3所示的类似，在一条TCP连接的管道上，从服务器进程向客户进程正在发送大量的数据，而客户进程同时在向服务器进程传输中断字符。而我们的本意是要中断字符尽快终止某个进程，使屏幕上不再有任何响应输出。
在流量控制和中断键这两种情况中，流量控制机制很少终止客户进程到服务器进程的数据流。这个方向仅仅包含我们键入的字符。所以对于从客户输出到服务器的非凡输入字符（Control_S和中断字符）不需要采用TCP的紧急方式（urgentmode）。
窗口大小的改变
假如是窗口风格的显示方式，当应用程序在运行的时候，我们还可以动态地改变窗口的大小。一些应用程序（典型的如那些操作整个窗口的应用程序，如全屏编辑器）需要知道窗口大小的变化。目前大多数Unix系统提供这种功能，可以告诉应用程序关于窗口大小的变化。
对于远程登录这种情况，窗口大小的变化发生在客户端，而运行在服务器端的应用程序需要知道窗口大小变化。所以Rlogin的客户需要采用某些方法来通知服务器窗口大小变化的情况以及新窗口的大小。
服务器到客户的命令
现在我们介绍通过TCP连接，Rlogin服务器进程可以发送给客户进程的4条命令。问题是只有一条TCP连接可供使用，所以服务器进程必须给这些命令字节做标记，使得客户进程可以从数据流中识别出这些是命令，而不是显示在终端上。所以我们将使用TCP的紧急方式（在20.8节中曾经介绍）。
当服务器要给客户发送命令时，服务器就进入紧急方式，并且把命令放在紧急数据的最后一个字节中。当客户进程收到这个紧急方式通知时，它从连接上读取数据并且保存起来，直到读到命令字节（即紧急数据的最后一个字节）。这时候客户进程根据读到的命令，再决定对于所读到并保存起来的数据是显示在终端上还是丢弃它。
采用TCP紧急方式发送这些命令的一个原因是第一个命令（“清仓输出(flushoutput)”）需要立即发送给客户，即使服务器到客户的数据流被窗口流量控制所终止。这种情况下，即服务器到客户的输出被流量控制所终止的情况是经常发生的，这是因为运行在服务器的进程的输出速率通常大于客户终端的显示速率。另一方面，客户到服务器的数据流很少被流量控制所终止，因为这个方向的数据流仅仅包含用户所键入的字符。
客户到服务器的命令
对于客户到服务器的命令，只定义了一条命令，那就是：将当前窗口大小发送给服务器。当客户的窗口大小发生变化时，客户并不立即向服务器报告，除非收到了服务器发来的0x80命令（图26-4中有介绍）。
同样，由于只存在一条TCP连接，客户必须对在连接上传输的该命令字节进行标注，使得服务器可以从数据流中识别出命令，而不是把它发送到上层的应用程序中去。处理的方法就是在两个字节的0xff后面紧跟着发送两个非凡的标志字节。
对于窗口大小命令，两个标志字节是ASCII码的字符‘s’。之后是4个16bit长的数据（按网络字节顺序），分别是：行数（例如，25），每列的字符数（例如，80），X方向的像素数量，Y方向的像素数量。通常情况下，后两个16bit是0，因为在Rlogin服务器进程调用的应用程序中，通常是以字符为单位来度量屏幕的，而不是像素点。
上面我们介绍的从客户进程到服务器进程的命令采用带内信令（in-bandsignaling），这是因为命令字节和其他的普通数据一起传输。选择0xff字节来表示这个带内信令的原因是：一般用户的操作不会产生0xff这个字节。所以说Rlogin是不完备的，假如我们采用某种方法，使得通过键盘就可以产生两个连续的0xff字节，而且正好在这之前是两个ASCII的‘s’字符，那么下面的8个字节就会被误认为是窗口大小了。
图26-4中介绍的是从服务器到客户的Rlogin命令，由于大多数的API采用的技术叫做“带外数据（out-of-banddata）”，所以我们就称它为带外信令(out-of-bandsignaling)。但是回忆一下在20.8节中对TCP紧急方式的讨论，在那里我们说紧急方式数据不是带外数据，命令字节是按照普通数据流进行传输的，非凡之处是采用了紧急指针。
既然带内信令被用来传输从客户到服务器的命令，那么服务器进程必须检查从客户进程收到的每个字节，看看是否有两个连续的0xff字节。但是对于采用带外信令的、从服务器传输到到客户的命令，客户进程不需要检查收到的每个字节，除非服务器进程进入了紧急方式。即使在紧急方式下，客户进程也仅仅需要留意紧急指针所指向的字节。而且由于从客户进程到服务器的数据流量和相反方向的数据流量之比是1:20，这就暗示带内信令适合于数据量比较小的情况（从客户到服务器），而带外信令适合于数据量比较大的情况（从服务器到客户）。
客户的转义符
通常情况下，我们向Rlogin客户进程键入的信息将传输到服务器进程。但是有些时候，我们并不需要把键入的信息传输到服务器，而是要和Rlogin客户进程直接通信。方法是在一行的开头键入代字符(tilde)“~”，紧跟着是下列4个字符之一：
1)以一个句号结束客户进程。
2)以文件结束符（通常是Control_D）结束客户进程。
3)以任务控制挂起符（通常是Control_Z）挂起客户进程。
4)以任务控制延迟挂起符（通常是Control_Y）来挂起仅仅是客户进程的输入。这时，不管客户运行什么程序，键入的任何信息将由该程序进行解释，但是从服务器发送到客户的信息还是输出到终端上。这非常适合当我们需要在服务器上运行一个长时间程序的场合，我们既想知道该程序的输出结果，同时还想在客户上运行其他程序。只有当客户进程的Unix系统支持任务控制时，后两个命令才有效。[1]​