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

banner-bad-warning

我们多次赞扬SSH的优点,用于安全和远程访问。 让我们来看看服务器本身,一些重要的“维护”方面,一些怪癖,可以增加湍流,否则平滑的骑。

虽然我们已经写了这个指南在Linux记住,这也适用于在OpenSSH的Mac OS X和通过Cygwin的Windows 7中

为什么它是安全的

我们已经提到很多次SSH是如何安全地连接和隧道数据从一个点到另一个的好方法。 让我们简单地看看事情如何工作,这样你就能更好地了解为什么事情会变得奇怪。

sshot-2

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

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

现在,让我们来看看SSL加密,这种类型使HTTP更安全。 在这里,我们有一个邮局,处理信件,谁检查,看看你的收件人是他或她声称是谁,并有法律保护你的邮件被看不见。 它更安全的整体,中央权威 - Verisign是一个,对于我们的HTTPS示例 - 确保您发送邮件的人检出。 他们这样做不允许明信片(未加密的凭证); 相反,他们要求真正的信封。

sshot-1

最后,让我们来看看SSH。 这里,设置有点不同。 我们在这里没有中央认证者,但事情仍然安全。 这是因为你向那些你已经知道地址的人发送信件,例如通过在电话上与他们聊天,而你正在使用一些真正奇怪的数学来签署你的信封。 你把它交给你的兄弟,女朋友,爸爸或女儿带到地址,只有如果收件人的花哨的数学匹配,你认为地址是应该的。 然后,你得到一封信,也防止窥探这个真棒数学。 最后,您将您的凭据发送到另一个秘密的算法信封到目的地。 如果数学不匹配,我们可以假设原始收件人移动,我们需要再次确认其地址。

随着解释只要是,我们认为我们会削减它在那里。 如果你有一些更多的洞察力,随时聊天的意见,当然。 现在,让我们来看看SSH,主机身份验证的最相关的功能。

主机密钥

主机认证本质上是你信任的人拿着信封(用魔术数学密封)并确认收件人的地址的部分。 这是一个相当详细的地址描述,它是基于一些复杂的数学,我们将刚刚跳过。 然而,有一些重要的事情要带走:

  1. 由于没有中央权威,真正的安全在于主机密钥,公钥和私钥。 (当您被授予访问系统的权限时,后面两个键被配置。)
  2. 通常,当您通过SSH连接到另一台计算机时,将存储主机密钥。 这使得未来的操作更快(或更少冗长)。
  3. 如果主机密钥改变,你很可能会被警告,你应该警惕!

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

banner warning

你不应该担心,但! 通常当担心安全时,将存在可以确认主机密钥(上面的ECDSA指纹)的特殊地方。 在完全在线的企业,通常它将在一个安全的登录只有网站。 您可能必须(或选择!)致电您的IT部门,以通过电话确认此密钥。 我甚至听说过一些地方的关键是在你的工作徽章或特别的“紧急号码”列表。 而且,如果你有物理访问目标机器,你也可以检查自己!

检查系统的主机密钥

有4种类型种用于制作密钥加密算法,但由于今年年初的默认OpenSSH是ECDSA( 有一些很好的理由 )。 我们今天将关注那个。 以下是您可以在您可以访问的SSH服务器上运行的命令:

ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key.pub -l

您的输出应返回如下所示:

256 ca:62:ea:7c:e4:9e:2e:a6:94:20:11:db:9c:78:c3:4c /etc/ssh/ssh_host_ecdsa_key.pub

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

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

〜/ .ssh / known_hosts

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

更改主机密钥和问题

有几个原因为什么主机密钥更改或它们不匹配什么记录在known_hosts文件中。

  • 系统已重新安装/重新配置。
  • 由于安全协议,主机密钥被手动更改。
  • 由于安全问题,OpenSSH服务器已更新并使用不同的标准。
  • IP或DNS租用已更改。 这通常意味着您尝试访问其他计算机。
  • 系统以某种方式被入侵,使得主机密钥改变。

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

OpenSSH如何处理未知主机

confirm

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

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

  • StrictHostKeyChecking设置为no; OpenSSH将自动连接到任何SSH服务器,而不管主机密钥状态如何。 这是不安全的,不推荐,除非你重新安装操作系统后添加一堆主机,之后你会改回它。
  • StrictHostKeyChecking设置为询问; OpenSSH将显示新的主机密钥,并在添加它们之前要求确认。 它将阻止连接进入更改的主机密钥。 这是默认值。
  • StrictHostKeyChecking设置为yes; 与“否”相反,这将阻止您连接到known_hosts文件中不存在的任何主机。

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

ssh -o StrictHostKeyChecking [option] user@host

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

ssh -o StrictHostKeyChecking ask yatri@192.168.1.50

由于更改的键而阻止的主机

如果你有一个服务器,你试图访问它的密钥已经改变,默认的OpenSSH配置将阻止你访问它。 你可以改变该主机的StrictHostKeyChecking值,但这不会是完全,彻底,偏执的安全,会吗? 相反,我们可以从known_hosts文件中简单地删除令人讨厌的值。

bad warning

这绝对是一个丑陋的事情,你的屏幕上。 幸运的是,我们的原因是重新安装操作系统。 所以,让我们放大我们需要的行。

我们去。 看看它如何引用我们需要编辑的文件? 它甚至给我们行号! 所以,让我们在Nano中打开该文件:

command

1st line

这是我们的违规键,第1行。我们需要做的是按Ctrl + K切掉整行。

after 1st line

这太好了! 所以,现在我们按Ctrl + O写出(保存)文件,然后Ctrl + X退出。

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

all done

创建新主机密钥

为了记录,你真的没有太多的理由改变你的主机密钥,但如果你发现需要,你可以很容易做到。

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

cd / etc / ssh /

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

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

sudo rm / etc / ssh / ssh_host_ *

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

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

sudo dpkg-reconfigure openssh-server

当计算机创建新密钥时,您将看到提示。 大大!

creating keys


现在你知道SSH如何工作一点点,你应该能够摆脱困难的地方。 “远程主机标识已更改”警告/错误是一个让很多用户,甚至那些熟悉命令行的用户。

对于加分,你可以看看如何远程复制文件在SSH,而无需输入密码 在那里,您将了解更多关于其他类型的加密算法,以及如何使用密钥文件增加安全性。

赞 (0)
分享到:更多 ()