在 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端口。为了安全起见,你可以把这个端口号改成别的,比如2323。使用 sudo nano 修改端口号:

$ sudo nano /etc/ssh/sshd_config
# 将 Port 22 改为 Port 2323,然后按 Ctrl+o,最后按 Ctrl+x。这样就修改完成
# 重新启动系统才能生效
$ sudo reboot

      如果是在客户端上,我们只需要安装 SSH Client,那么安装 openssh-client 软件包即可:

$ sudo apt-get install openssh-client

      这样,OpenSSH 客户端就安装好了。它携带了一些其他 SSH 工具,比如 ssh-****** 可以用来生成公钥/私钥对,scp 可以用来通过 SSH 远程复制文件,sftp 可以实现安全 FTP 传输,等等。

测试

      安装好后,马上就可以在服务器上测试一下:

$ ssh localhost -p 2323

      正常情况下,SSH 会邀请你输入密码,通过认证后,便登录成功,你就进入了基于 SSH 新的命令行了。要退出也很简单,使用 Ctrl+d 或 exit 命令即可。

 

SSH 配置

      首先,我们需要生成一对公钥/私钥。

       在 Linux 客户机上,运行 ssh-****** 命令(请确认你安装了 openssh-client 软件包):

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

      上面命令行输入的 rsa 代表 rsa for protocol version 2。有关参数选项的含义,建议参考 OpenSSH 用户手册——ssk-******

      这样,**对就生成了。公钥是~/.ssh/id_rsa.pub,私钥是~/.ssh/id_rsa。

将公钥复制到服务器

      生成公钥后,我们还需要将它复制到服务器上。

      你可以使用 scp 进行远程 copy,但是 OpenSSH 提供了一个更好的工具叫做 ssh-copy-id QuickTip: Make life easier with ssh-copy-id ), 专门用于**的复制 。它可以更安全地帮助我们上传公钥,并自动把公钥写入 SSH 服务器上的 ~/.ssh/authorized_keys (如果~/.ssh目录不存在的话,它会自动创建)。

$ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

      如果想查 authorized_keys 文件的获取权限是不是 -wr------ ?可以使用 ls -l 命令查看文件的权限:

$ cd .ssh
$ ls -l
 

SSH 登录测试

      复制后,我们来测试一下,看看使用刚才创建的**对能不能登录。

  1. 从 Linux 登录

      从 Linux 客户机上登录 SSH 服务器很简单:

$ ssh [email protected]

      输入**密码后,应该就可以登录成功了。如果你在创建 key 时没有输入密码,则登录时也不需要使用密码,直接就能登录成功(可以用在 shell 脚本中实现自动维护任务)。

      如果你的 .ssh 目录下有多个 key,则可以使用 -i 来指定 key 文件:

$ ssh -i .ssh/id_rsa [email protected]

   2. 用 PuTTY 登录

      在 Windows 上用 PuTTY 登录的话,我们的私钥必须用 PuTTYgen 转换一下格式。在 PuTTYgen 的 File 菜单上,选择“Load private key” 或 直接单击“load”按钮(如图 20.1 所示)。

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

图 20.1  在 PuTTYgen 上加载私钥

       如果你的私钥有密码,PuTTYgen 会要求你输入密码,如图 20.2 所示。

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

图 20.2 输入私钥的密码

       输入正确的密码后,会显示导入成功。并提示说,“Save private key”将私钥保存为 PuTTY 自己的 key 格式,如图 20.3 所示。

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

图 20.3 私钥导入成功

      现在,在 PuTTYgen 的界面上,你可以修改 key 的备注(Key comment),然后单击“Save private key”按钮,将私钥保存(如图 20.4 所示)。

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

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

图 20.4 修改备注并保存

  • Run the Putty client (PuTTY.exe) to specify the saved private key and auto-login username before initiating connection to lewis.

      现在,在 PuTTY 中的“Connection -> SSH -> Auth”配置界面中,指定 key 的路径即可,如图 20.5 所示。

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

图 20.5 在 PuTTY 中加载私钥

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

Graph 20.6 Specify the login user ID

SSH服务器配置

      在 SSH 服务器上,我们要禁止使用密码登录,仅允许使用**登录。

      先备份/etc/ssh/sshd_config,然后修改它:

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config-backup
$ sudo nano /etc/ssh/sshd_config

     找到下面几行内容:

PermitRootLogin yes
#PasswordAuthentication yes
UsePAM yes

     将 yes 全部改为 no:

# 不允许使用 root 账号登录系统
PermitRootLogin no
# 密码登录权限失效
PasswordAuthentication no
UsePAM no

     文件保存后,重新启动 SSH 服务:

$ sudo /etc/init.d/ssh restart

     好,SSH 服务器的配置就完成了。现在开始,SSH 服务器将不再接受密码登录方式,只有使用私钥 key 才能登录。

 

下一篇:使用 PuTTYgen 在 Windows XP 上生成**对以及 SSH 的远程复制文件功能——中