我经常在多台设备上使用远程主机,主要是 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 RIGHTS
NTFS 一起使用。
答案1
建议 1:自动更改所有权 - 例如,制作一个包装器批处理脚本,该脚本icacls foo /setowner
每次在实际启动 OpenSSH 之前运行。如果文件的 NTFS ACL 明确授予“更改所有权”权限,则您无需拥有管理员权限。
建议 2:加密卷使用 FAT32 或 exFAT 而不是 NTFS。exFAT 没有文件所有者。对于内容很少更改的小卷,使用 NTFS 的优势不大。
建议 3:在每个客户端上设置不同的密钥,并将“主”密钥存储在单个受信任的机器上。无论何时需要它,都可以将密钥发送(由于 Windows ssh-agent 的持久存储,这可能无法很好地与其配合使用。但是,只要您记得再次删除密钥,它仍然可以工作。)ssh -A
到该机器(使用客户端系统自己的密钥)和ssh-add
密钥。
建议 4:不要随身携带原始密钥文件(无论是否加密),而是将其存储在硬件令牌上。
获取 Yubikey,特别是具有 PIV 智能卡模拟功能的型号(YK5、YK4、YKNEO)。非 Yubikey USB 令牌也可以使用,只要它们可以模拟 PIV 智能卡(由于开放规范,它具有“几乎无需驱动程序”的优势)–不是OpenPGP 智能卡。
将您的 SSH 密钥导入智能卡(例如使用 Yubikey Manager)。
配置您的 Windows OpenSSH 以使用
PKCS11Provider libykcs11.dll
来自“yubico-piv-tool”包的程序。该模块无需安装,因此您可以随身携带。相关博客文章对于 Linux,配置 OpenSSH 以使用
PKCS11Provider libykcs11.so
(再次来自 yubico-piv-tool)或者其他方式opensc-pkcs11.so
(它是 OpenSC 的一部分,您可能已经拥有)。还携带一份 PuTTY-CAC(或只是 Pageant-CAC)的副本,它允许 PuTTY 和 WinSCP 通过 Windows CNG 和 PKCS#11 支持智能卡(这意味着它可以本地访问 PIV 卡)。
这种方法的优点是,在您解锁 BitLocker 卷时,即使是恶意机器(或恶意 ssh.exe)也无法窃取您的密钥。