在您的Linux PC上了解OpenSSH的内部和外部

我们已经多次赞扬SSH在安全性和远程访问方面的优点。让我们来看看服务器本身,一些重要的“维护”方面,以及一些可能会给原本顺畅的旅程增加动荡的怪癖。

虽然我们在编写本指南时考虑到了Linux,但这也可以通过Cygwin适用于MacOSX和Windows7中的OpenSSH。

为什么它是安全的

我们已经多次提到SSH是如何安全地将数据从一个点连接到另一个点并通过隧道传输数据的好方法。让我们简要地看一下事情是如何运作的,这样你就能更好地理解为什么事情有时会变得很奇怪。

当我们决定启动与另一台计算机的连接时,我们通常使用易于使用的协议。我脑海中都浮现出Telnet和FTP。我们将信息发送到远程服务器,然后我们得到关于连接的确认。为了建立某种类型的安全性,这些协议通常使用用户名和密码组合。这意味着他们是完全安全的,对吗?不对!

如果我们认为我们的连接过程是邮件,那么使用FTP和Telnet等不同于使用标准的邮件信封。这更像是使用明信片。如果有人碰巧站在中间,他们可以看到所有的信息,包括通信者的地址以及发送出去的用户名和密码。然后,他们可以更改消息,保持信息不变,并模拟一个或另一个通信者。这被称为“中间人”攻击,它不仅会危及您的帐户,而且会使您发送和接收的每一条消息和文件都受到质疑。你不能确定你是否在与发件人交谈,即使你在交谈,你也不能确定没有人在看中间的一切。

现在,让我们来看一下SSL加密,这是一种使HTTP更安全的加密。在这里,我们有一个邮局来处理信件,他们会检查你的收件人是否是他或她声称的那个人,并且有法律保护你的邮件不被查看。总体而言,它更安全,而且中央机构--比如我们的HTTPS,Verisign就是其中之一--确保您要向其发送邮件的人结账。他们通过不允许明信片(未加密的凭证)来做到这一点;相反,他们强制使用真正的信封。

最后,让我们看看SSH。在这里,设置略有不同。我们这里没有中央验证器,但一切都很安全。这是因为你正在给你已经知道地址的人写信--比如说,通过电话与他们聊天--而且你正在使用一些非常奇特的数学方法在你的信封上签名。你把它交给你的兄弟、女朋友、父亲或女儿,让他们把它带到这个地址,只有当收件人的花哨的算术匹配时,你才会认为这个地址是它应该是的。然后,你会收到一封信,这封信也是通过这个令人惊叹的数学方法保护你不被窥探的。最后,您将凭据放在另一个秘密的算法魔法信封中发送到目的地。如果数学不匹配,我们可以假设原始收件人搬家了,我们需要再次确认他们的地址。

有了这样的解释,我们想就到此为止。如果你有更多的洞察力,当然可以在评论中随意聊天。不过,现在让我们来看看SSH最相关的特性,即主机身份验证。

主机密钥

主机身份验证本质上是您信任的人拿起信封(用魔术数学密封)并确认收件人地址的部分。这是对地址的非常详细的描述,它基于一些复杂的数学,我们将直接跳过这些数学。不过,从这件事中可以学到一些重要的东西:

由于没有中央机构,真正的安全性在于主机密钥、公钥和私钥。(后两个密钥是在您获得系统访问权限时配置的。)。 通常,当您通过SSH连接到另一台计算机时,会存储主机密钥。这使得将来的操作更快(或不那么冗长)。 如果主机密钥更改,您很可能会收到警报,您应该小心!

由于主机密钥在身份验证之前用于建立SSH服务器的身份,因此您应该确保在连接之前检查密钥。您将看到如下所示的确认对话框。

不过,你不用担心!当安全性受到关注时,通常会有一个特殊的地方可以确认主机密钥(上面的ECDSA指纹)。在完全在线的风险投资中,它通常会出现在一个安全的只能登录的网站上。您可能不得不(或者选择这样做!)。打电话给您的IT部门,通过电话确认此密钥。我甚至听说过一些地方,钥匙在你的工作牌上,或者在特别的“紧急号码”名单上。而且,如果您对目标计算机有物理访问权限,您还可以自己检查!

正在检查系统的主机密钥

有4种类型的加密算法用于生成密钥,但到今年早些时候为止,OpenSSH的默认加密算法是ECDSA(有一些很好的理由)。今天我们将重点关注这一点。以下是您可以在有权访问的SSH服务器上运行的命令:

您的输出应该返回如下内容:

第一个数字是密钥的位长,然后是密钥本身,最后是存储它的文件。将中间部分与提示您远程登录时看到的内容进行比较。应该是匹配的,你就都准备好了。如果没有,那么可能会有其他事情发生。

您可以通过查看KNOWN_HOSTS文件来查看通过SSH连接到的所有主机。它通常位于:

您可以在任何文本编辑器中打开它。如果您查看,请尽量注意密钥是如何存储的。它们与主计算机的名称(或网址)及其IP地址一起存储。

更改主机密钥和问题

主机密钥更改或与KNOWN_HOSTS文件中记录的内容不匹配有几个原因。

系统已重新安装/重新配置。 由于安全协议的原因,已手动更改主机密钥。 由于安全问题,OpenSSH服务器已更新并使用不同的标准。 IP或DNS租约已更改。这通常意味着您正在尝试访问另一台计算机。 系统以某种方式受到危害,以致主机密钥更改。

最有可能的是,该问题是前三个问题之一,您可以忽略该更改。如果IP/DNS租约更改,则服务器可能有问题,您可能会被路由到另一台计算机。如果您不确定更改的原因是什么,那么您可能应该假设它是列表中的最后一个。

OpenSSH如何处理未知主机

OpenSSH有一个如何处理未知主机的设置,反映在变量“StrictHostKeyChecking”(不带引号)中。

根据您的配置,与未知主机(其密钥还不在KNOWN_HOSTS文件中)的SSH连接可以有三种方式。

StrictHostKeyChecking设置为no;OpenSSH将自动连接到任何SSH服务器,而不考虑主机密钥状态。这是不安全的,不推荐这样做,除非您在重新安装操作系统后添加了一大堆主机,之后您会将其更改回来。 StrictHostKeyChecking设置为Ask;OpenSSH将向您显示新的主机密钥,并在添加它们之前要求确认。它将防止连接转到更改的主机密钥。这是默认设置。 StrictHostKeyChecking设置为yes;与“no”相反,这将阻止您连接到KNOWN_HOSTS文件中尚未存在的任何主机。

您可以使用以下范例在命令行上轻松更改此变量:

将[Option]替换为“no”、“Ask”或“yes”。请注意,此变量及其设置周围有单直引号。还要将user@host替换为您要连接的服务器的用户名和主机名。例如:

由于密钥更改而阻止的主机

如果您尝试访问的服务器的密钥已经更改,则默认的OpenSSH配置将阻止您访问它。您可以更改该主机的StrictHostKeyChecking值,但这不会完全、彻底、偏执地安全,不是吗?相反,我们可以简单地从KNOWN_HOSTS文件中删除有问题的值。

在你的屏幕上显示这绝对是一件难看的事情。幸运的是,我们这样做的原因是重新安装了操作系统。那么,让我们放大我们需要的那条线。

我们开始吧。看到它怎么引用我们需要编辑的文件了吗?它甚至给了我们行号!那么,让我们在Nano中打开该文件:

这是我们有问题的键,在第一行。我们需要做的就是按Ctrl+K来剪掉整行。

那好多了!因此,现在我们按Ctrl+O写出(保存)文件,然后按Ctrl+X退出。

现在我们得到一个很好的提示,我们可以简单地回答“是”。

创建新的主机密钥

郑重声明,您没有太多理由更改主机密钥,但是如果您发现需要,可以很容易地进行更改。

首先,切换到相应的系统目录:

这通常是全局主机密钥所在的位置,尽管有些发行版将它们放在其他地方。如果有疑问,请检查您的文档!

接下来,我们将删除所有旧密钥。

或者,您可能希望将它们移动到安全的备份目录。这只是我的一个想法!

然后,我们可以告诉OpenSSH服务器重新配置自身:

当您的计算机创建其新密钥时,您将看到一个提示。哒-哒!

现在您已经了解了SSH如何工作得更好一些,您应该能够让自己走出困境。“Remote Host Identify Has Changed”警告/错误会让很多用户感到震惊,即使是熟悉命令行的用户也不例外。

对于奖励积分,您可以查看如何在不输入密码的情况下通过SSH远程复制文件。在这里,您将了解更多关于其他类型的加密算法的信息,以及如何使用密钥文件来增强安全性。

相关文章