绕过 ssh 密钥文件权限检查

ins*_* me 34 permissions ssh private-key

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

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

所以目前我正在使用 0600 权限将它复制到我硬盘驱动器上的其他地方,使用它然后安全地擦除它,但这很痛苦。

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

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

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

小智 46

从 stdin 添加密钥对我有用:

cat /path/to/id_rsa | ssh-add -k -
Run Code Online (Sandbox Code Playgroud)

  • 就像一个魅力 - 应该是公认的答案 (6认同)
  • 为什么这没有一个赞成?它开箱即用,无需安装,无论如何您都在使用 ssh-agent,不是吗? (2认同)

use*_*437 18

AFAIK,无法通过 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
Run Code Online (Sandbox Code Playgroud)

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

sudo vim /etc/fstab
Run Code Online (Sandbox Code Playgroud)

下次挂载卷时,它的权限为 700,所有者 ID 为 501。

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


Kyl*_*ith 7

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

制作一个 1MB 的空文件:

dd if=/dev/zero of=diskimg bs=1024 count=1024
Run Code Online (Sandbox Code Playgroud)

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

mke2fs diskimg
Run Code Online (Sandbox Code Playgroud)

将其安装在某处(以 root 身份):

mount -t ext2 -o loop diskimg /my/path/to/diskimg
Run Code Online (Sandbox Code Playgroud)

现在你有一个很小的 ​​ext2 文件系统,你可以在上面设置权限。您可以编写一个脚本来挂载它,并确保这些权限具有基于您使用的任何系统的正确 UID/GID(因为 UID 可能不匹配)。它还需要 sudo/root 访问权限才能工作。