SSH 的双因素身份验证

“安全外壳”SSH 是一种用于在主机之间建立安全连接的网络协议,通常通过端口 22(最好更改)。 SSH 客户端和 SSH 服务器适用于大多数操作系统。 几乎任何其他网络协议都可以在 SSH 内工作,也就是说,您可以在另一台计算机上远程工作、通过加密通道传输音频或视频流等。 除了, 通过远程主机上的 SOCKS 代理 您可以代表此远程主机连接到其他主机。

身份验证使用密码进行,但开发人员和系统管理员传统上使用 SSH 密钥。 问题是私钥可能被盗。 添加密码理论上可以防止私钥被盗,但实际上,在转发和缓存密钥时,它们 无需确认仍可使用。 双因素身份验证解决了这个问题。

如何实现双因素认证

Honeycomb 的开发人员最近发布了 详细说明,如何在客户端和服务器上实现适当的基础设施。

这些说明假设您有一个对 Internet 开放的基本主机(堡垒)。 您希望通过互联网从笔记本电脑或计算机连接到该主机,并访问位于其后面的所有其他设备。 2FA 可确保攻击者即使获得对您笔记本电脑的访问权限(例如通过安装恶意软件)也无法执行相同的操作。

第一个选项是 OTP

OTP - 一次性数字密码,在本例中将与密钥一起用于 SSH 身份验证。 开发人员写道,这不是一个理想的选择,因为攻击者可能会建立一个假堡垒,拦截您的 OTP 并使用它。 但总比没有好。

在这种情况下,在服务器端,以下行将写入 Chef 配置中:

  • metadata.rb
  • attributes/default.rb (的 attributes.rb)
  • files/sshd
  • recipes/default.rb (复制自 recipe.rb)
  • templates/default/users.oath.erb

客户端安装任何 OTP 应用程序:Google Authenticator、Authy、Duo、Lastpass、已安装 brew install oath-toolkit или apt install oathtool openssl,然后生成一个随机的base16字符串(key)。 它被转换为移动身份验证器使用的 Base32 格式并直接导入到应用程序中。

因此,您可以连接到 Bastion 并看到它现在不仅需要密码,还需要 OTP 代码进行身份验证:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

第二个选项是硬件身份验证

在这种情况下,用户不需要每次都输入OTP码,因为第二因素变成了硬件设备或生物识别。

这里Chef的配置稍微复杂一点,客户端的配置取决于操作系统。 但完成所有步骤后,MacOS 上的客户端可以使用密码并将手指放在传感器上确认 SSH 中的身份验证(第二个因素)。

iOS 和 Android 用户确认登录 按智能手机上的一个按钮。 这是Krypt.co的一项特殊技术,比OTP更安全。

在 Linux/ChromeOS 上,可以选择使用 YubiKey USB 令牌。 当然,攻击者可以窃取您的令牌,但他仍然不知道密码。

来源: habr.com

添加评论