分享发现 基于 FIDO 密钥的 OpenSSH 身份验证

henry.chen · April 28, 2022 · 151 hits

概述

  • 在网络连接安全愈加重要的背景下,FEITIAN FIDO 产品可通过在 SSH(一种通用的客户端 - 服务器连接协议)上使用 FIDO 认证功能,建立一个安全的链接通道。现在,OpenSSH(v8.2 及更高版本)也已支持 FIDO 身份验证功能。本文主要阐释两个例子,讨论一下如何使用 FEITIAN FIDO 密钥来运用 SSH 连接进行安全的远程账户操作。
  • 需要用到 Github 作为远程测试网站,以及 Git Bash 作为命令行工具。二者 SSH Git 操作均已支持 FIDO2 安全密钥。详情可以查看GitHub 相关博文
  • 使用 Git bash 连接远程 Linux 系统。

准备工作

  • FEITIAN FIDO 密钥(本文案例中使用的是 BioPass K27),PIN 已设置
  • Github 账号,有测试存储库
  • Git bash,OpenSSH 版本高于 8.4p1,OpenSSL 版本高于 1.1.1h
  • 第二个例子需要 Linux 子系统或虚拟机

连接 Github

FEITIAN FIDO2 安全密钥可用于支持 FIDO2 协议的 SSH 连接,远程操作账户。本部分以 Github 连接和 Git 存储库为例。

设置 FIDO 密钥 PIN

  • 如果已经设置了 PIN 码,跳过这一步
  • 把 FIDO 密钥连接到 PC 或其他设备上,使用 FT_SK Manager/FT BioPass Manager(指纹密钥)/系统的指纹管理器设置 PIN
  • 具体可以查看“FT_SK manager user manual

生成密钥对

  • 插入密钥,打开 Git bash 命令行,输入:ssh-keygen -t ecdsa-sk -C <你的 Github 账户邮箱>
  • 注意,FEITIAN 密钥只支持 ecdsa-sk 算法,请不要选择其他类型
  • 触摸密钥
  • 输入你设置的密钥 PIN 码,然后再触摸一次密钥
  • 输入存储密钥对的路径,使用默认路径的话就空着。如果存在名称、类型相同的文件,会询问是否覆盖
  • 这个命令会创建一个公私钥对并存储在设备相应的目录下,但机密信息实际上是由你的安全密钥生成并存储的。私钥文件更像是对安全密钥的参考引用。也就是说,其他任何人没有拿到你的安全密钥,就无法使用这个私钥文件。所以,请务必保管好你的安全密钥
  • 输入加密和解密口令,有时可能会需要再输入一遍。完成!

复制公钥到 Github 网站

  • 使用文本编辑器打开电脑中已设定路径下的公钥文件
  • 复制内容
  • 打开 GitHub 网站,点击右上角的账户,然后点击“Settings”
  • 在账户设置页面,点击“SSH and GPG keys”,打开 SSH 以及 GPG 密钥配置界面,然后点击“New SSH key”
  • 把公钥文件的内容粘贴到“Key”方框中,输入标题,然后点击“Add SSH Key”,完成!
  • 在下面这个页面中能够看到所有的 SSH 密钥,可进行添加或删除的操作

用 Git Bash 连接 Github

  • 插入安全密钥
  • 打开 Git bash,首先输入以下内容测试 SSH 连接:ssh -T git@github.com
  • 触摸密钥,确认用户在线状态
  • 如果看到以下提示,则连接成功
  • 现在,你可以通过 git 操作管理你的 Github 项目,输入:git clone git@github.com:github/secure_headers.git
  • 用户的 Github 项目复制到了本地,默认路径与 PC 用户相同。当然,你也可以自行添加路径和名称,输入:git clone git@github.com:github/secure_headers.git <path/name>
  • 触摸安全密钥
  • 远程项目已克隆到本地
  • 现在,你可以在本地管理 Git 项目。也可以利用这种安全连接进行各种远程操作,包括 pull、push 和 fetch

连接 Linux 系统

  • SSH 的另一个用例是连接 Linux 子系统(Linux 虚拟机)
  • 确保客户端和服务器都在 Openssh v8.2 及更高版本上运行,设置 FIDO 设备的 PIN 码和指纹
  • 此例中使用 Windows 10 的 Git bash 作为客户端,Ubuntu 20.04 LTS 作为服务器

生成公私钥对

  • 插入 FIDO 设备,并输入:ssh-keygen -t ecdsa-sk
  • 下列步骤与之前的相同:
    • 1) 输入设备 PIN 码
    • 2) 触摸 FIDO 设备
    • 3) 输入文件路径,保存密钥(默认路径如下)
    • 4) 输入两次口令(非必须),完成!

把公钥对添加到目标服务器中

  • 打开目标服务器命令行
  • 把公钥(id_ecdsa_sk.pub)放到服务器(Linux 中路径为~/.ssh),添加到 authorized_keys 文件,输入路径~/.ssh,然后输入: cat id_ecdsa_sk.pub >> authorized_keys
  • 使用“Chmod”为.ssh 授权 600,为 authroized_keys 授权 644

准备服务器配置

  • 查看~/.ssh/sshd_config,确保端口不与其他进程冲突
  • 另外,确保公钥验证为“yes”,检查 authorized_keys 的路径,如果客户端用户为根,需将“permitrootlogin”设置为“yes”
  • 确保 ssh-agent 启动,并开启 ssh 服务,输入:eval ssh-agent; service ssh restart,可通过“ps -e |grep ssh”确认 ssh-agent 和 sshd 正在运行
  • 获取服务器 ip 地址,输入:ifconfig

在客户端测试连接

  • 在客户端使用“ssh [username]@[server ip]”进行连接。确保安全密钥已插入,客户端会提示触摸密钥
  • 如果没有在 10 秒内触摸设备,或使用了错误指纹,客户端会要求输入密码(在 sshd_config 中设置)
  • 触摸设备通过验证后,则连接成功
No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.