我有一组用于登录帐户和服务器的 SSH 密钥。但是,自从我将我的主要工作配置文件移动到 USB 驱动器(出于同步和易用性以及其他原因)以来,我一直无法直接使用配置文件中的 SSH 密钥进行身份验证,而不得不创建本地副本。
正常的 SSH 工作流程通常会进行
ssh-add $HOME/.ssh/id_server_key
ssh username@domain
Run Code Online (Sandbox Code Playgroud)
哪个工作没有问题。但是,为了防止每台机器都有我的密钥的副本,我将它们移到了 xexternal 驱动器,USB 格式为vfat
. 那么工作流应该变成这样:
ssh-add /run/media/myself/USB/.ssh/id_server_key
ssh username@domain
Run Code Online (Sandbox Code Playgroud)
......这不起作用。SSH 抱怨做一些事情来保护我:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @警告:未受保护的私钥文件!@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ “id_server_key”的权限 0644 太开放了。 要求其他人无法访问您的私钥文件。 此私钥将被忽略。 错误的权限:忽略键:id_server_key 权限被拒绝(公钥)。
虽然我可以理解,但在这种情况下它并没有真正保护我。
USB 驱动器在我的发行版中自动挂载,带有 (我认为) 的 fmask 022
。我可以卸载并重新挂载带有 fmask 的 USB 驱动器,077
但这将 (1) 每次都需要超级用户权限,并且 (2) 影响设备中的每个文件,而不仅仅是 SSH 密钥。
我已经尝试为密钥创建一个符号链接,即使之前使用了umask
我在一些提示和技巧中看到的:
cd .ssh
umask 077
ln -s /run/media/myself/USB/.ssh/id_server_key
Run Code Online (Sandbox Code Playgroud)
但是权限不能以这种方式用于符号链接,所以我什么也没得到。
那么,如果目标是在机器上没有密钥的物理副本,我在这里有哪些可用的选项?其中一台机器是家用笔记本电脑,可以去各个地方,所以我有兴趣避免一些钥匙被发现。
到目前为止,我已经考虑了以下几点:
ssh-add
主要)接受来自外部设备的密钥的选项?(我认为应该有 - 大多数程序都遵循“我知道我在做什么”标志,但到目前为止我在联机帮助页中找不到它。bindfs
在.ssh/
目录上设置 a ,但问题是目录非空(因为它包含known_hosts
和其他数据)。fuse-zip
- 将键放在上面/dev/shm
似乎也是一种可能的路径。编辑:根据@Gilles 的评论,是的,bindfs
解决了这个问题。检查联机帮助页后,使用以下调用成功进行了初始测试:
bindfs -n -r -p 0700 -o nonempty /run/media/myself/USB/.ssh/ ~/.ssh
Run Code Online (Sandbox Code Playgroud)
它绑定了不允许其他用户(显然甚至来自root
!)的访问,只读,具有反映的0700
权限。这种反射是我最初使用 bindfs 时缺少的部分。将nonempty
是必要的,因为已有的文件,如旗known_hosts
。这完全保留了原始工作流程,除了关于无法添加信息的额外警告消息known_hosts
(最终我可能不介意)。
当然,按照最初的建议,我现在正在绑定到另一个目录(在 /dev/shm 中),以使事情变得稍微容易一些。
我不像encfs
我的 USB 驱动器那样阴谋诡计(还),所以在隐私方面这对我来说已经足够了。
ssh-add
没有选项可以绕过其对关键权限的检查。您可以重新编译该程序并禁用该检查。
一个bindfs应该可以工作。您不需要将其安装在~/.ssh
,将其安装在特殊用途的位置并编写一个可以执行此操作的脚本ssh-add ~/.ssh-private-keys-bindfs
。
请注意,ssh 是正确的,因为您的设置非常不安全。您必须确保永远不要将该驱动器插入到您不是唯一用户的计算机中。
归档时间: |
|
查看次数: |
8584 次 |
最近记录: |