使用 OpenSSH 完成一切,第 1 部分

作者:Marcel Gagné

很久以前,就在这个专栏,我写了一系列关于加密和隐藏踪迹的文章,我称之为“高科技隐身术”。在该系列文章中,我谈到了明文通信对安全性的危害。对于那些可能仍在使用 telnet 连接到远程系统的人,这里快速回顾一下。任何运行像 sniffit (reptile.rug.ac.be/~coder/sniffit/sniffit.html) 这样的程序的人都可以监视通过您网络的每个数据包。如果您使用 telnet 登录,那么该人可以清楚地看到您的用户名和密码。看看图 1,看看您是否能猜出用户 nessie 的密码。这应该能劝退您在任何安全性哪怕是稍有重要的通信中使用 telnet。

Doing It All with OpenSSH, Part 1

图 1. 您能从这张截图猜出 nessie 的密码吗?

解决这个困境的一种方法是使用安全外壳。OpenSSH 是安全外壳协议的开源实现,几乎每个主要的 Linux 发行版都带有它。您可以访问 www.openssh.org 获取最新版本,但您可能系统上已经有了它。话虽如此,如果您想保持安全性,那么及时更新到最新版本的 OpenSSH 至关重要。因此,如果您的 OpenSSH 版本已经过时几个月,您可能需要考虑检查更新。

安全外壳不仅仅是一种保护密码的简单方法。在本系列文章中,我将带您从基础知识到一些巧妙的功能,这些功能应该会让您想知道为什么还要使用其他任何方式进行通信(好吧,几乎是这样)。

Ssh 有几个组件:客户端和服务器,用于生成公钥和私钥加密密钥以进行强身份验证的实用程序,以及安全的 FTP 服务器。在我们使用安全外壳登录之前,我们需要启动一个安全服务器,这通常在启动时通过 /sbin/init.d 或 /etc/rc.d/init.d 中的脚本完成,具体取决于您的系统。在那里查找一个名为 sshd 的脚本。您也可以通过在 shell 中键入 sshd 来启动 sshd 守护程序。

要登录到名为 speedy 的远程系统,我将使用此命令:ssh speedy

默认情况下,sshd 守护程序(或服务器)在 TCP 端口 22 上运行——通过在您的 /etc/services 文件上执行 moreless 来查看它——但是您可以使用 -p 选项指定不同的端口。假设您想在端口 2222 上运行服务器,以使不受欢迎的访客更难探测您的系统。要更改此设置,只需键入 sshd -p 2222

顺便说一句,您可以在任意多个端口上运行多个 sshd 守护程序,但这可能没有必要。由于您的服务器现在在端口 2222 上运行,您也可以使用 -p 选项连接到 speedy,就像您对服务器所做的那样。

     ssh -p 2222 -l natika speedy

好的,所以我添加了另一个选项。-l 选项告诉系统使用用户名 natika 登录。默认情况下,ssh 登录使用您当前登录的用户名。

     Warning: Permanently added 'speedy,192.168.22.3' (RSA) to the list of known hosts.
     mgagne@speedy's password:

很简单。此时,您将输入密码,登录并开始工作会话,就像您使用 telnet 一样,只是更安全。但是,上面的消息不是您可能收到的唯一消息,稍后我将介绍其他一些消息。现在,我想让您看看 已知主机列表 这几个字。在您的主目录 ($HOME) 中,您应该找到一个名为 .ssh 的目录,其中应该包含一个名为 known_hosts 的文件。这就是密钥信息存储的地方;在上面的例子中,它存储了 RSA 密钥。它看起来像这样。

speedy,192.168.22.3 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAw4MQ4ubLTHuQCW9rlksXLME9wnYYege1z/
K3J3caMpzkFy7DpJ1VQjIspf03wyHgdAbg3jaV6NBbN7y35UOLy2oqJ/vk3QISdgKca/OqH/
UpeesyXB0kMb0HMCX8LD8tJVaCzEtoi2BZNSAOZNheHx7znz80uTWUTA2cQkk7gs0=

不错,是吧?别担心。我不指望您坐在那里阅读它,只是出于好奇。记住这个文件,因为有时在连接时,您可能会收到这样的消息

   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
   Someone could be eavesdropping on you right now (man-in-the-middle attack)!
   It is also possible that the RSA host key has just been changed.
   The fingerprint for the RSA key sent by the remote host is
   76:3f:54:71:22:48:36:5b:c8:8c:42:e5:e7:db:60:60.
   Please contact your system administrator.
   Add correct host key in /home/mgagne/.ssh/known_hosts to get rid of this message.
   Offending key in /home/mgagne/.ssh/known_hosts:119
   Password authentication is disabled to avoid man-in-the-middle attacks.
   X11 forwarding is disabled to avoid man-in-the-middle attacks.
   Permission denied (publickey,password,keyboard-interactive).

是的,这听起来很糟糕,但实际上可能是无害的。正如消息所说,RSA 主机密钥也可能刚刚被更改。如果您了解并信任该系统,您可以编辑您的 ~/.ssh/known_hosts 文件并删除包含有问题密钥的行。连接错误消息方便地让您知道您可以跳转到的行号,在本例中为第 119 行。如果像我一样,您倾向于使用 vi,这里有一个快速到达那里的酷技巧。

     vi +119 ~/.ssh/known_hosts

+119 将您直接带到第 119 行。到达那里后,快速的 dd 可以为您删除有问题的行。但我离题了。

我提到过,在连接时,您可能会看到不同的消息。为了刷新您的记忆,这是我连接到主机 speedy 时收到的消息

    Warning: Permanently added 'speedy,192.168.22.3' (RSA) to the list of known hosts.
     mgagne@speedy's password:

我可能收到的另一个常见消息是

     The authenticity of host 'speedy (192.168.22.3)' can't be established.
     RSA key fingerprint is 83:9f:6b:3f:69:02:2a:94:c5:ef:5f:35:f9:42:71:17.
     Are you sure you want to continue connecting (yes/no)?

区别在于另一个配置文件。sshd 守护程序和 ssh 命令本身都有全局配置选项,可以在 /etc/ssh 目录中找到。如果您从源代码构建了 OpenSSH,您可能会在 /usr/local/etc/ssh 中找到它。sshd 守护程序的配置文件名为 sshd_config,而 ssh 客户端的配置文件名为 ssh_config。目前,我将专注于 ssh_config 文件

     Host *
       ForwardX11 yes

正如您可能从 Host 段末尾的星号猜到的那样,您可以为不同的主机设置不同的参数。这是一个全局设置。稍后我将讨论 X 转发,但如果您的 ssh_config 文件中只有这些内容,您可以预期会收到消息,要求您验证您连接的任何新系统的真实性。让我们从 known_hosts 中删除密钥条目并重试。这次,我们在全局 ssh_config 文件中添加一行

     StrictHostKeyChecking no

现在连接到我的主机导致简单地接受主机的 RSA 密钥。但是您可能会问,如果您将 StrictHostKeyChecking 设置为 Yes 会发生什么?

     Host *
     ForwardX11 yes
     StrictHostKeyChecking yes

现在当我尝试连接到 speedy 时,返回的是此消息

     $ ssh -l mgagne speedy
     No RSA host key is known for speedy and you have requested strict checking.
     Host key verification failed.

朋友们,这就是我今天要讲的内容。密钥、密钥生成和密钥管理将是我下一篇文章的主题。

Marcel GagnéLinux Journal法式主厨 和 Linux 的忠实信徒。他的新书 Moving to Linux: Kiss the Blue Screen of Death Goodbye! 将于 8 月出版。您可以从 他的网站 了解更多信息。

电子邮件: mggagne@salmar.com

加载 Disqus 评论