在多个系统间共享时如何管理 NTFS 中的 SSH 密钥权限

在多个系统间共享时如何管理 NTFS 中的 SSH 密钥权限

我经常在多台设备上使用远程主机,主要是 Windows 和 Linux 机器。为了避免到处部署 SSH 密钥,并避免同步 SSH 配置的麻烦,我将 SSH 配置文件和密钥放在 U 盘中 Bitlocker 加密的 NTFS 分区中。

include在工作机器上使用 SSH 配置,这样我只能访问插入并解密我的笔式驱动器的机器上的远程主机。在 Linux 下,uid=1000,dmask=077, fmask=177使用 NTFS 挂载选项,以便配置文件和 SSH 密钥具有正确的权限。

问题出在 Windows 上的 SSH 客户端上。除非密钥文件的所有者是当前用户,并且没有其他用户有权访问这些文件,否则客户端会抱怨权限错误(请参阅这个帖子了解详情)。与 UNIX 系统不同,uid=1000在大多数情况下,系统会引用默认用户,定义的 NTFS 权限对象不在整个系统内共享。因此,当笔式驱动器插入另一台 Windows 计算机时,该文件归 拥有Account Unknown(S-1-5-21-235848236-322578882-4173758772-1003),这不起作用。我现在唯一的解决方案是每次将笔式驱动器切换到另一台 Windows 计算机时,手动更改文件的所有权和权限。

我正在寻找有关改进当前设置的建议。任何帮助我都会感激不尽。

更新

我测试过,SSH 甚至无法与OWNER RIGHTSNTFS 一起使用。

答案1

建议 1:自动更改所有权 - 例如,制作一个包装器批处理脚本,该脚本icacls foo /setowner每次在实际启动 OpenSSH 之前运行。如果文件的 NTFS ACL 明确授予“更改所有权”权限,则您无需拥有管理员权限。

建议 2:加密卷使用 FAT32 或 exFAT 而不是 NTFS。exFAT 没有文件所有者。对于内容很少更改的小卷,使用 NTFS 的优势不大。

建议 3:在每个客户端上设置不同的密钥,并将“主”密钥存储在单个受信任的机器上。无论何时需要它,都可以将密钥发送ssh -A到该机器(使用客户端系统自己的密钥)和ssh-add密钥。(由于 Windows ssh-agent 的持久存储,这可能无法很好地与其配合使用。但是,只要您记得再次删除密钥,它仍然可以工作。)


建议 4:不要随身携带原始密钥文件(无论是否加密),而是将其存储在硬件令牌上。

  1. 获取 Yubikey,特别是具有 PIV 智能卡模拟功能的型号(YK5、YK4、YKNEO)。非 Yubikey USB 令牌也可以使用,只要它们可以模拟 PIV 智能卡(由于开放规范,它具有“几乎无需驱动程序”的优势)–不是OpenPGP 智能卡。

  2. 将您的 SSH 密钥导入智能卡(例如使用 Yubikey Manager)。

  3. 配置您的 Windows OpenSSH 以使用PKCS11Provider libykcs11.dll来自“yubico-piv-tool”包的程序。该模块无需安装,因此您可以随身携带。相关博客文章

    对于 Linux,配置 OpenSSH 以使用PKCS11Provider libykcs11.so(再次来自 yubico-piv-tool)或者其他方式opensc-pkcs11.so(它是 OpenSC 的一部分,您可能已经拥有)。

  4. 还携带一份 PuTTY-CAC(或只是 Pageant-CAC)的副本,它允许 PuTTY 和 WinSCP 通过 Windows CNG 和 PKCS#11 支持智能卡(这意味着它可以本地访问 PIV 卡)。

这种方法的优点是,在您解锁 BitLocker 卷时,即使是恶意机器(或恶意 ssh.exe)也无法窃取您的密钥。

相关内容