绕过 ssh 密钥文件权限检查

绕过 ssh 密钥文件权限检查

我有一个加密的 FAT 卷(为了兼容性),其中包含私钥文件和其他敏感数据。

我想使用我的私钥通过 SSH 连接到我的服务器,但是当然,由于 FAT 不支持文件权限,它会忽略我的密钥并说它的权限太开放。

所以目前我正在将它复制到硬盘上具有 0600 权限的其他位置,使用它然后安全地删除它,但这很麻烦。

有没有办法绕过这个 ssh/scp 命令行的权限检查?

编辑:准确度:它是 OS X 上的 TrueCrypt 卷。

解决方案:下面接受的答案解决了我的问题(使用位于 Mac OS X 的 TrueCrypt 卷上的 SSH 密钥文件),但这是一种解决方法。看起来没有办法“绕过sh密钥文件权限检查”。

答案1

据我所知,没有办法用 ssh 或 ssh-add 绕过密钥文件权限检查(而且你无法用命名管道或类似的东西来欺骗它)。此外,你实际上并不是想欺骗 ssh,而只是想能够使用你的密钥文件。

确实,TrueCrypt 卷应该保持您的数据私密,因此将卷安装为世界可读(TrueCrypt 的默认行为)并不是最佳选择。如果您使用的是 FAT 格式的卷,您确实应该调整安装选项,正如 Dan Carley 所建议的那样。

尽管 TrueCrypt for OS X 尚未正确支持挂载选项(即使您使用命令行界面和手册页中的挂载选项启动 TC - 已经尝试过),但 OS X 确实支持基于卷名的挂载选项默认值。

您需要知道您的用户 ID(如果您是计算机的第一个/唯一用户,则通常为 501)。您可以使用“id -u”获取它。

假设您的卷名是“PRIVATE”(卷名大写),并且您的 uid 是 501,您要做的就是将这一行添加到 /etc/fstab 中:

LABEL=PRIVATE none msdos -u=501,-m=700

您需要以 root 身份创建/编辑此文件(它不存在于默认 OSX 安装中):

sudo vim /etc/fstab

下次挂载该卷时,它将具有权限 700 和所有者 ID 501。

这也适用于 USB 驱动器(通常也以 FAT 格式)。

答案2

从 stdin 添加密钥对我有用:

cat /path/to/id_rsa | ssh-add -k -

答案3

作为一种疯狂的解决方法,您可以制作包含您的私钥的 ext2 卷的磁盘映像并将其作为循环设备安装,然后从那里使用您的 ssh 密钥。

创建一个1MB的空文件:

dd if=/dev/zero of=diskimg bs=1024 count=1024

将其格式化为 ext2(当它说它不是设备时按 Y):

mke2fs diskimg

将其挂载到某处(以 root 身份):

mount -t ext2 -o loop diskimg /my/path/to/diskimg

现在您有一个可以设置权限的微型 ext2 文件系统。您可以编写一个脚本来挂载它,并确保这些权限根据您所使用的系统具有正确的 UID/GID(因为 UID 可能不匹配)。它还需要 sudo/root 访问权限才能工作。

答案4

如果我没记错的话,ssh-agent不会检查密钥权限。因此这可能会有效:

[ -S “$SSH_AUTH_SOCK” ] || 评估 $(ssh-agent)
ssh-添加路径/到/id_rsa

相关内容