日期:2014-05-17  浏览次数:21010 次

在 Windows XP 上使用 OpenSSH 和 PuTTY 的公钥认证远程管理 Unubtu Server 10.04 LTS——上

注意 :代码中的 # 只表示注释作用,该内容不能输入到命令行窗口中

?

????? 远程管理 Ubuntu,可以通过很多方式,这里只介绍 SSH。通过 SSH 可以远程登录到服务器上,让你觉得好像就在服务器面前工作一样。我们使用的 SSH 是 OpenSSH ,它是由两个小组开发的,其中 OpenBSD 为该项目做了杰出贡献。通过 OpenSSH,我们不仅可以远程使用命令行,还可以远程运行 X Window 图像程序,安全地传输文件。我们甚至还可以用 OpenSSH 的端口映射功能为其它协议做管道,来通过防火墙或者不可信任的网络。

????? OpenSSH 的安全性非常高,如果你目前仍在使用 telnet、rlogin、ftp 这些非常不安全的工具(它们传输密码时使用明文,导致密码很容易被窃取),希望你能尽快转移到 SSH 上来,已减少网络安全隐患。

?

关于公钥认证

为什么要用公钥认证

????? 如果你的 SSH 服务器是放在 Internet 上的,那么 Hiweed 强烈建议你不要使用密码登录。因为总有些像搞破坏的人,使用各种各样的方法,希望能够得到你的用户名和密码,然后做一些乱七八糟的事情。

????? 请你千万不要不以为然。你可以查看系统认证日志文件,该文件位于/var/log/auth.log 。使用 tail 查看文件的最后几行(-n 的默认值为 10,即十行)。使用 -f 开关,可以输出该文件新增的数据。具体参数配置可以使用 tail --help 命令。

$ cd /var/log
$ tail -f auth.log

其轮转(rotate)后的日志文件为 /var/log/auth.log.0 等。使用 grep 过滤出 SSH 的认证信息:

$ grep failed auth.log.0

?????? 你很有可能会看到非常多的认证失败信息:

Jul  1 21:18:44 lee sshd[2273]: error: key_read: key_from_blob AAAAB3NzaC1yc2EAAAABJQAAAIEAql2+PY8ZDVK+RVLUCzteXHyz8qFoC/fNlUOw fjRVUuVoytgjpqyHWM7vSxkBO90B6f8mPL8jxhWBGqXMv2hQKsJrHDf4m9ILIrDN/pGt/HnZ/JQZkLOnxddWdXCLbDMESrU8D3a9SMSkEbmL5RgJ+NIv6DbrlTElT7lm ESAM5Ns= lee's key\n failed
Jul  1 21:26:13 lee sshd[2560]: error: key_read: uudecode AAAAB3NzaC1yc2EAAAABJQAAAIEAql2+PY8ZDVK+RVLUCzteXHyz8qFoC/fNlUOwfjRVUuVoytgjpqyHWM7vSxkBO90B6f8mPL8jxhWBGqXMv2hQKsJrHDf4m9ILIrDN/pGt/HnZ/JQZkLOnxddWdXCLbDMESrU8D3a9SMSkEbmL5RgJ+NIv6DbrlTElT7lmESAM5Ns== lee's key\n failed

???? 尤其是那些在时间上很连续的登录尝试,一看就知道是暴力破解。

???? 既然密码登录方式这么不安全,那么使用什么方式登录呢?使用公钥

公钥认证是怎么工作的

???? “公钥”是从 Public Key 翻译过来的,和“私钥”(Private Key)相对应。公钥和私钥都是一个很长的字符串(一个非常大的随机数)。公钥放在服务器上,私钥放在你的客户机上;当你从客户机连接服务器时,如果你的 私钥能够和公钥对上号,就可以通过认证。

???? 简单地说,公钥就好像一把锁,把服务器锁住;私钥就好像一把钥匙,只有钥匙对了,才能打开那把锁。没有钥匙,别指望打开它。

?????? 因为大多数 SSH 程序保持私钥时都使用密码加密保护。所以,即便你的电脑丢失,私钥被人拿到,你也有足够的时间来创建新的公钥和私钥,并将服务器上的旧公钥替换掉。

SSH 的安装

?????? Ubuntu 提供了一个 meta 软件包,名为 ssh。它依赖 openssh-server 和 openssh-client。使用 apt-cache 显示软件包的依赖关系,从而验证我们刚才所说的是否正确:

$ apt-cache show ssh
...
Depends: openssh-client, openssh-server
...?

????? 如果你的机器上既需要 SSH Server 又需要 SSH Client,可以直接安装 ssh 软件包;否则,就可以分开来安装。

安装 SSH 服务器和客户端

????? 如果你的服务器上只需用 SSH Server的话,则安装 openssh-server 软件包即可。使用 dpkg -l 查看软件包 openssh-server 是否已安装。如没,则输入安装命令。

# 确认 openssh-server 是否已安装
$ dpkg -l openssh-server
# 如没,则输入安装命令
$ sudo apt-get install openssh-server

????? 这样,OpenSSH 服务器就安装好了。提供 SSH 服务的程序叫做 sshd,其配置文件是/etc/ssh/sshd_config 。在默认情况下,SSH 服务跑在 TCP 的22端口。为了安全起见