概述
- 在网络连接安全愈加重要的背景下,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 中设置)
- 触摸设备通过验证后,则连接成功