Linux系统自动化管理: 远程登录(1)


Telnet 和 SSH 协议是 Internet 远程登录服务的标准协议和主要方式,它们为用户提供了在本地机器上完成远程机器上工作的能力。用户使用 Telnet 或者 SSH 软件连接远程服务器,在 Telnet 或者 SSH 软件中输入的命令就会在服务器上运行。Telnet 协议本质上是不安全的,因为它使用明文传送数据、用户账号和口令,很容易受到中间人攻击方式的攻击;而 SSH 协议则是比较可靠、专为远程登录会话和其他网络服务提供安全性的协议。通过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗。本文主要针对 SSH 协议进行阐述,使用的 SSH 软件是 OpenSSH,它是开放源代码的免费的 SSH 替代软件包。

用户使用 Telnet 或者 SSH 登录不同的操作系统,会得到不同的返回信息。用户可以编写程序根据运程登录的返回信息进行判断和处理,从而实现远程服务器系统的自动化登录。本文将先介绍实现远程自动化登录用到的技术,再详细介绍如何实现 Unix/Linux 系统间远程登录自动化。

远程系统自动化登录机制简介

所谓自动化远程登录,是指在用户不干预的情况下,不需要手动输入密码,就能登录到远程系统。目前远程登录工具有两种安全认证方式。

基于用户口令的安全认证

当使用登录账户登录时,根据提示输入口令,SSH 就会用安全密码认证协议,将加密传送给 SSHD 服务器。认证成功后,就可以登录到 SSHD 服务器。

针对这种安全认证方式,可以让程序自动输入用户名和密码,实现自动化登录。目前可以用 expect, C 或 Perl 来实现。如果采用 C, 需要很熟悉 TCP/IP 协议,实现起来比较复杂;如果用 expect, 由于 expect 是基于 Tcl 的,需要熟悉 Tcl 语法;如果用 perl 实现,需要采用 perl 的 expect.pm 这个包。但需要用户输入口令,因此这种认证方式存在着安全隐患。

基于 SSH key 交换的安全认证方式

用户需要先在 SSH 客户端为登录账户创建一对密匙:私钥private key)和公钥 (public key),然后把公钥传送到要登录的 SSHD 服务器上。当用户使用 SSH 客户端登录 SSHD 服务器时,SSH 客户端就会向 SSHD 服务器发出用登录帐户的密钥进行安全验证的请求;SSHD 服务器收到请求,先在登录帐号的主目录下寻找对应的公钥,并与客户端发送过来的公钥进行对比;如果两个密钥一致,SSHD 服务器会用公钥加密“质询”challenge),发送给 SSH 客户端;SSH 客户端收到“质询”之后用客户端的私钥解密,再把它发送给 SSHD 服务器。这样就完成了安全认证的整个过程。

使用基于 SSH key 交换的认证方式,用户只要将在 SSH 客户端生成的公钥复制到远程的 SSHD 服务器。当通过 SSH 客户端登录 SSHD 服务器时,用户不需要输入密码,就可以自动登录到远程 SSHD 服务器。这种方式不仅简便,而且避免了用户名和密码的泄露,比第一种方式要安全。


相关内容