SDB:配置 openSSH

跳转到:导航搜索
本文档描述了 OpenSSH 中常用的一些选项。这可以帮助您提高安全性和易用性。请确保您已经能够使用 openSSH 进行连接,然后再更改任何选项。这将使您更容易找到问题,以免把自己锁在外面。请阅读 openSSH 基础知识 以设置您的第一个连接。
Icon-merge.png
更新至版本 15.5
本文需要针对较新版本进行测试。如果您正在使用此指南的较新版本,并且发现指南已更新至此版本,请将版本号添加到知识栏。请参阅版本相关任务:SDB 页面以获取更多信息。

在 openSUSE 上测试


前提条件

要使用本文档,需要具备基本的 Linux/openSUSE 知识,包括

  • 在命令行中工作
  • 编辑文本文件
  • 获取 root 权限(使用 su、sudo 或以 root 用户登录)
  • 熟悉 YaST 模块:“用户和组”和“防火墙”

当然,您必须拥有一个正常运行的网络。如果您想从 LAN 外部设置连接,您必须能够在您的路由器上打开必要的端口。


配置文件

SSHD 和 SSH 都使用配置文件(config)文件。这些文件可以很容易地使用您喜欢的文本编辑器进行编辑。当您第一次查看配置文件时,您会注意到大多数选项都被注释掉了。(例如# Port) 这意味着它们将被读取为“注释”,而不是实际设置。

如果这是关于变量设置,这意味着将使用默认值。一个好的事情是,默认注释的选项显示了默认值,因此您可以了解连接在默认设置下是如何工作的。为了修改一个选项,取消注释它(删除#行首的)并更改选项后面的值。每当您觉得新设置对您不起作用时,只需放回注释(#) 即可再次使用默认值。

SSHD – 服务器

SSHDSecure Shell Daemon)应在服务器上运行。(远程主机)。SSHD 管理四个任务:传入连接、身份验证、规则和加密。

SSHD 仅使用一个配置文件,该文件位于/etc/ssh/sshd_config。可以使用您喜欢的编辑器以 root 身份编辑此文件。SSHD 的配置非常通用,仅用于为(尝试)登录的用户构建限制。实际的连接参数将从客户端设置。

在设置 SSHD 时,您必须记住您认为安全或适当允许的内容。例如:如果您在 SSHD 中禁止 X 转发,那么在客户端设置 X 转发将毫无用处。因此,在设置 SSHD 时,请明智地考虑 SSH 连接的目的。

也可以通过安装 yast2-sshd 包在 Yast2 下配置 SSHD。这是一个 GUI,它将更新/etc/ssh/sshd_config为您。在本文中,我们将坚持编辑/etc/ssh/sshd_config直接。

SSH – 客户端

SSHSecure Shell)是 openSSH 包的客户端程序之一。该程序用于登录到远程 shell 或直接运行远程命令。在本文中,我们将参考 SSH 配置文件,尽管它们也适用于 SFTPSCP

有三种方法可以配置 SSH。所有三种方法都有相同的选项,这些选项将作为参数传递给 SSH。

  1. 系统范围的配置文件/etc/ssh/ssh_config
  2. 个人配置文件~/.ssh/config
  3. 命令行参数

当参数相互矛盾时,将使用最后给定的参数。因此,命令行参数优先于两个配置文件,而个人配置文件优先于系统范围的配置文件。

如果您正在运行一个具有多个用户的系统,并且这些用户再次有自己的偏好或使用不同的远程主机,那么明智的设置如下

  • 系统范围配置中的一些通用设置/etc/ssh/ssh_config。您必须以 root 身份编辑此文件。
  • 个人配置文件中的主机特定连接详细信息~/.ssh/config。任何用户都可以编辑自己的配置文件。允许他设置自己的主机和连接数据,而无需 root 权限。使用此文件设置您需要的(几乎)每个连接的配置。
  • 命令行参数可用于覆盖或在某些时候使用特定参数。(例如,用于测试或维护)。

请记住,SSH 协议旨在在不安全网络上使用,在两个不受信任的主机之间。这意味着安全性不仅是服务器端的问题,也是客户端的问题。因此,例如,如果您不信任服务器,请不要启用 X 转发。伪造服务器上的误导管理员可能会监视发送到 X 服务器的您的确切击键(例如,密码)。因此,不要只是启用配置文件中的所有功能,而只启用您需要的功能。上述设置的好处是用户可以根据主机自行确定信任度。

重新加载配置

每当您更改/etc/ssh/sshd_config时,您必须重新启动 SSHD 或使其重新加载其配置,方法是键入

# rcsshd restart

# rcsshd reload

您可以使用正在运行的 SSH 连接执行此操作,并且无需注销。但是,更改仅在用户下次尝试登录时生效。


监听传入连接

在(实际)配置中的第一步是:“SSHD 将监听哪个位置?”为此,我们可以设置以下选项

地址

默认情况下,SSHD 监听所有本地地址。如果您拥有一台具有多个网络连接的计算机,并且只想使用其中一个或几个,您可以指定它。找到并更改以下内容/etc/ssh/sshd_config作为 root

#ListenAddress 0.0.0.0
-to-
ListenAddress * your ip *

如果您仅使用单个接口或具有 DHCP 的网络,建议将其保留在默认设置中。如果您想使用多个接口,但不是全部,您可以指定每个地址,以新行开头ListenAddress。每行都需要以端口选项。

端口

开头。默认情况下,SSHD 监听端口 22。您可以选择不更改它。但是,如果攻击者正在寻找可能的连接以进行破解,他们首先会寻找最常见的端口,例如 22。更改端口号可以大大减少由系统攻击者或 僵尸计算机 执行的自动化攻击的数量。另一方面,更改端口号会强制用户在所有想要连接到您的客户端上配置此替代端口。我们将使用端口 2222 作为替代端口在以下示例中。要更改侦听端口号,请编辑/etc/ssh/sshd_config作为 root 并更改

#Port 22
-to-
Port 2222
记住在防火墙上打开新端口,如果适用,关闭旧端口。还要记住重新加载新配置

设置 SSH 连接到 SSHD

现在您需要设置 SSH(客户端)以连接到 SSHD 上先前设置的端口。首先,编辑/etc/ssh/ssh_config。您将看到Host *选项。这意味着所有远程主机。在“Host”行下指定的所有选项仅适用于该主机,直到指定下一个Host行。这意味着此文件中的所有以下选项都适用于所有主机。将其保留在默认值中。检查Protocol选项。这必须取消注释并设置为 2(Protocol 2)。这是为了确保现在不安全且旧的协议 1 不会被使用。现在保存并关闭此文件。如果没有正在运行的连接,您不需要重新启动任何东西即可使更改生效。更改将在您下次进行 SSH 连接时生效。

个人配置文件

这是设置具有每主机数据的个人配置文件的示例。首先检查您的主目录中是否存在 .ssh 目录,以及正确的拥有者(您)和权限。如果目录不存在,请以普通用户身份创建它。

$ mkdir ~/.ssh $ chmod 700 ~/.ssh

现在使用您喜欢的编辑器创建一个新文本文件,并将其保存为~/.ssh/config。现在我们可以配置我们的主机特定连接

Host ssh-server
      Hostname 192.168.100.103
      Port 2222

在这里,我们为远程主机地址 192.168.100.103 设置了一个易于使用的名称(ssh-server)。Host选项可以设置为您喜欢的任何名称,只要主机名选项已指定。如果主机名选项未指定,则需要在Host选项。

之后放置实际地址。现在我们可以连接到先前配置的 SSHD,它正在地址 192.168.100.103 上监听端口 2222 并以当前用户身份登录,键入

$ssh ssh-server

要以远程系统上的不同用户名登录,请键入

$ssh user@ssh-server

您将被提示输入密码。

您可以指定多个主机并为它们设置自己的设置

 Host ssh-server
      Hostname 192.168.100.103
      Port 2222
Host workserver
      Hostname  ssh.host.org
      Port 5041
      Compression yes

压缩在慢速连接(例如拨号)上启用时很方便。如果在快速连接上启用,它只会降低您的连接速度,消耗大量的服务器和客户端资源。


访问控制

这些设置是可选的。小心使用,您可能会把自己锁在外面。

这是 SSHD 安全性的重要部分。谁将被允许连接并登录到您的计算机。首先,不要使用简单的密码。在基本配置中,任何主机都可以连接到您的计算机。如果攻击者知道您的 IP 和侦听端口(这很容易获得),他可以轻松启动基于字典的攻击。如果攻击者知道您的名字是“John Smith”,您的用户名很可能是 john、js、john.smith 等。如果您的密码是您狗的名字,那么很容易破解您的系统。此外,不要信任第三方密码数据库,例如您的电子邮件、论坛和 wiki 帐户。现在是时候在您的计算机密码之间进行严格的分离,并使用互联网上的密码了。在您的密码中使用随机的大写和小写字母数字和非字母数字字符始终是良好的安全做法。

按主机限制

如果有固定的位置,您想从这些位置登录到您的 SSHD,您可以设置一个每主机访问控制。在/etc/hosts.allow中,输入以下行以允许您特别允许的主机,例如

sshd : 127.0.0.1   : allow
sshd : 192.168.    : allow
sshd : 130.57.5.70 : allow
sshd : 10.         : allow

接下来,在/etc/hosts.deny,

sshd : ALL         : deny

中输入所有需要拒绝的内容。如果您对更动态的主机访问控制感兴趣,您可能需要使用 DenyHosts 脚本。这将允许您从您喜欢的任何位置登录,同时 DenyHosts 会根据诸如登录尝试之类的规则过滤恶意主机。DenyHosts 然后会将这些恶意主机添加到/etc/hosts.deny。它还有更多不错的函数,例如通过电子邮件记录和报告。

按用户限制

SSHD 允许仅为特定用户或组限制登录。只要可能,请使用组来启用/禁用访问。这样,以后编辑访问权限会更简单。

这些选项可以输入到/etc/ssh/sshd_config中,并按以下顺序处理

  • PermitRootlogin
  • DenyUsers
  • AllowUsers
  • DenyGroups
  • AllowGroups

PermitRootLogin可以设置为yesno。默认值为yes。建议将其更改为no,因为每个 *NIX 系统都有用户 root,并且该用户是万能的,因此是破解系统的理想用户。您仍然可以通过键入获得 Root 权限susudo在以普通用户登录后。你甚至可能想要

其他选项可以跟随着一个或多个用户或组名模式,用空格分隔。只有名称有效;数字化的用户或组 ID 不会被识别。你可以编辑/etc/ssh/sshd_config使用你喜欢的编辑器并添加以下行

AllowGroups sshlogin

这将只允许属于 sshlogin 组的用户登录到服务器。现在打开Yast2 > 安全与用户 > 用户和组管理来创建 sshlogin 组,并添加必须允许登录服务器的用户。如果你现在尝试使用一个未包含在此组中,甚至不存在的用户登录,你仍然会被提示输入密码,并且仍然会有多次尝试机会,但会一直收到“密码错误”的提示。因此,攻击者将无法知道是密码错误还是用户不存在。


身份验证

OpenSSH 服务器可以使用其内置的身份验证系统来验证用户

在这篇文章中,仅描述了键盘交互式和公钥身份验证的使用。欢迎你扩展这篇文章,添加其他方法。

键盘交互式

在 OpenSUSE 下运行 SSHD 时,键盘交互式身份验证最常见的方式是 PAM。PAM 也用于本地用户身份验证,并使用通过 Yast 设置的相同密码。以下选项允许使用 PAM 进行身份验证、帐户和会话检查 

ChallengeResponseAuthentication yes
UsePAM yes

这些是默认值。

公钥身份验证

公钥身份验证允许你在服务器上登录,无需密码提高安全性。密钥对在客户端生成,私钥必须存储在安全的地方。公钥被发送到服务器并存储在“授权密钥文件”中。这意味着持有私钥的计算机(和用户)可以登录到持有公钥的计算机。

来自主文章 OpenSSH 公钥身份验证

密钥生成

如果使用 ssh-keygen 而不带任何参数,将生成一个 2048 位 RSA 密钥。私钥将存储在~/.ssh/id_rsa而公钥将存储在~/.ssh/id_rsa.pub。根据你的需要,你可以选择设置密码。留空这些行将不会设置密码。

$ ssh-keygen
Enter file in which to save the key (/home/your_user/.ssh/id_rsa): <Enter>
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
Your identification has been saved...

上传你的密钥

为了使用你生成的密钥进行身份验证,你的公钥需要被上传

$ ssh-copy-id user@ssh.yourserver.org
密码
现在尝试使用 "ssh 'user@ssh.yourserver.org'" 登录机器,并在
~/.ssh/authorized_keys
中检查,以确保我们没有添加你未预期的额外密钥。

如果你想了解更多关于这个主题的信息,包括完全禁用密码身份验证以提高安全性以及使用 DSA 或其他自定义密钥选项,请阅读 全文


故障排除

公钥身份验证不再工作

版本:11.3+ 以下内容从 openSUSE 11.3 开始适用。

自从 openSSH 5.4 以来,配置中的相对路径不再允许。在指向授权 _keys 文件时,请确保在路径前使用 %h/,指向你的 authorized_keys 文件。旧版本仍然可以不使用。在/etc/ssh/sshd_config中更改

AuthorizedKeysFile .ssh/authorized_keys
-to-
AuthorizedKeysFile %h/.ssh/authorized_keys

参见

手册页

$ man hosts_access
$ man ssh
$ man ssh_config
$ man sshd
$ man sshd_config

相关文章

外部链接