Linux 下基于密钥的安全验证实现方法 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

-------OpenSSH+WinSCP+putty 密钥生成器 +putty

实验背景:

公司目前已使用 Linux 搭建了各个服务器( FTP DNS Apache Sendmail Samba ),由于这些服务器都被放置在一个安全的地方,一般是不允许任何人进入的,公司现在需要通过远程客户端安全的访问这些服务器。

SSH 是标准的网络协议,可用于大多数 UNIX 操作系统,能够实现字符界面的远程登录管理,它默认使用 22 号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的 Telnet ,具有更高的安全性。

SSH 提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的,不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到 SSH 服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密 质询 ,并把它发送给客户端软件( puetty )。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。

实验网络拓扑:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

实验步骤:

 

一、 安装并配置 OpenSSH 软件

RHEL4 系统中 OpenSSH 服务器和客户端软件是默认安装的,因此不需要用户手动安装。如果没有安装,与 OpenSSH 服务相关的软件包都包括再第二张安装光盘中,可通过 rpm 命令进行安装。

 

RHEL4 中,与 OpenSSH 服务相关的配置文件都保存在目录 “/etc/ssh” 中,其中 sshd_config SSH 服务器的配置文件, ssh_config SSH 客户机的配置文件。本实验通过在 Windows 使用 puetty 登录,因此不需要配置 ssh_config 。只需要配置 sshd_config 即可。

 

sshd_config 文件中将下面的三行注释掉即可。

RSAAuthentication yes 开启 RSA 加密功能

PubkeyAuthentication yes 开启公钥验证功能

AuthorizedKeysFile 指定公钥的文件名称以及保存位置

 

配置完成之后,需要重启 sshd 服务程序,以便新的配置生效。

 

SSH 服务器端(客户机端也可以,最好在客户机端生成,然后将公钥上传到对应的目录中,这样比较安全)生成公钥和私钥对。

ssk-keygen 命令用于生成当前用户的密钥对。

-t rsa 命令选项指定密钥的类型为 rsa

-b 1024 命令选项指定密钥的长度为 1024 位。

ssh-keygen 命令生成密钥的执行过程中,需要用户回答相关的设置信息,第一个为私钥的默认路径,第二个为私钥的密码,第三个为私钥的再次密码确认。

 

ssh-keygen 命令执行完毕后会在用户宿主目录的 “.ssh” 目录中生成两个文件,其中 id_rsa 是用户私钥文件, id_rsa.pub 是用户的公钥文件,这两个文件是通过 ssh_keygen 命令一次生成,并且需要配对使用的。

 

由于生成的公钥名称与指定的公钥名称不符,因此需要将生成的文件名换成 authorized_keys 即可。

 

二、 安全使用 WinSCP 软件导出用户私钥

由于需要将私钥文件 id_rsa 拷贝到用户的主机上,而且还要删除服务器上的私钥,这样可以保证私钥的唯一性。如果通过 Samba 或者 FTP 服务器都可能造成私钥的丢失,因此需要采用安全的方式访问 Linux 服务器。 WinSCP Windows 下的 scp sftp 客户端程序,安装完 WinSCP 软件之后,开启 WinSCP 软件会出现与 PuTTY 类似的配置对话框,在该对话框中输入 SSH 服务器的主机名( IP 地址)和端口号,用户名和密码(口令),并选择 登录 按钮进入登录,连接的方式是通过密文传输的,安全性极高。

 

通过 WinSCP 软件登录上 Linux 之后,可以将用户的私钥 id_rsa 先拷贝到自己的主机上,然后将 Linux 上的私钥删除即可以防后患。

 

三、 使用 PuTTY 密钥生成器生成 Windows 识别的密钥。

由于 Linux 下生成的密钥直接在 Windows 下是不能使用的,因此需要使用 puTTYgen Windows 客户端生成对应的私钥。

Linux 服务器上下载下来的私钥导入到 PuTTY 服务器上,选择密钥位数为 1024 ,类型为 SSH-2 RSA 和服务器上命令 ssh-keygen 设置的参数对应。

 

单击 生成 按钮,然后输入密钥使用的密码。

 

生成之后,单击 保存私钥 到本机上,会生成一个扩展名为 ppk 文件退出即可。

 

四、 安装并配置 PuTTY 软件

 

windows 中需要安装第三方软件来实现 SSH 客户端的功能。 PuTTY Windows 下最流行的 SSH 客户端软件,并且还是绿色软件,专门为 SSH 设置使用的,能够免费使用。下面是打开之后的主界面。

在会话一栏输入主机名称对应的 IP 地址,端口号为 22 ,协议类型为 SSH

 

在认证一栏中导入 PuTTY 密钥生成器生成的密钥。

 

然后保存会话并打开。输入用户名 root ,然后输入私钥的密钥即可。

 

由于 SSH 采用密文的传输方式,因此默认运行 root 用户直接进入 SSH 登录,出于安全的需要也可以设置禁止 root 用户直接进行 SSH 登录。

sshd_config 配置文件中将 “permitRootLogin yes” 前面的注释去掉,并将 “yes” 改为 “no” 即可。对 sshd_config 配置之后,重新启动 sshd 服务即可。

 

PuTTY 上设置一个使用 Linux 口令登录可以发现登录失败,这就是 “PermitRootLogin no” 造成的。