使用带有空密码的 SSH 密钥可以吗?

moz*_*ves 48 security ssh

当我第一次学习如何制作 ssh 密钥时,我阅读的教程都指出应该选择一个好的密码短语。但是最近,当设置一个需要 ssh 到另一台机器的守护进程时,我发现唯一的方法(似乎)有一个我不需要在每次启动时进行身份验证的密钥是创建一个带有空的密钥密码。所以我的问题是,使用没有密码的密钥有什么问题?

Mo.*_*Mo. 53

没有密码短语的密钥依赖于没有其他人能够获得该密钥(无论如何谁都无法获得它授予访问权限的资源)。因此,如果密钥允许访问旁边的机器,并且两台机器都具有相同级别的电子和物理安全,那么这真的没什么大不了的。

另一方面,如果您的密钥位于安全性较差的机器上(也许它有许多不受信任的用户,很容易在物理上访问,或者没有及时更新其补丁机制),那么您可能不会“不想在那里保留无密码的密钥。

最终,这取决于对您的设置的信心并权衡这样做的风险/成本——如果您可以非常确信攻击者获得密钥的访问权实际上并不比获得密钥的资源更容易访问,那你就没事了。如果您没有这种信心,您可能应该解决原因:)


cpb*_*lls 12

另一种解决方案,在增强安全性的同时让您更轻松,因此您不必一直输入密码:

如果您想加密您的私钥,您可以ssh-agent在您的工作站上使用“缓存”未加密的密钥。当您想存储解密的密钥时,您可以运行ssh-add ~/.ssh/id_rsa或命名您的私钥。系统将提示您输入密码,解密的密钥将可用于您的 ssh 连接,直到您注销、终止ssh-agent或关闭。

例如,您可以kill使用存储的密钥,ssh-agent -k并且可以为密钥分配生命周期以使其在内存中ssh-agent -t [seconds];如果您不想让您的密钥永远被解密,但您想在您的主机周围进行大量 ssh-ing,您可以将超时设置为 5-10 分钟。所以您不必连续输入密钥的密码。

同样,这一切都与您对 /workstation/ 的安全性有多大信心有关,如果您是唯一可以访问它的人,并且您有一个非常安全的本地密码,而您没有邀请您自己进行漏洞利用和 rootkit,您的无密码私钥是相当安全的。

如果你像我一样,把你的私钥保存在拇指驱动器上,你肯定会想要加密它,即使它只是一个私钥(我在工作站上使用的一个单独的,所以如果我丢失了我的密钥,我可以很容易地从我的服务器~/.ssh/authorized_keys列表中删除拇指驱动器的公钥,这也带来了一个 /excellent/ 理由来向你的公钥添加有用的评论)

在您对之前的回答的回复中,您说只有您信任的人才能使用密钥访问机器。我只是想澄清一下,您的私钥不需要在您要连接的服务器上,以防万一。只有您的公钥需要在服务器上,这不是问题,这就是为什么它是“公钥”的原因。

哦,我忘了提;我ssh-agent在启动 X 时启动,否则我存储的解密密钥ssh-add不会通过不同的xterm会话保留,每次关闭xterm启动时我都必须重新输入密码ssh-add。在我的~/.xinitrc文件中,我有:

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi
Run Code Online (Sandbox Code Playgroud)

我调用了ssh-agent包装,eval因为 ssh-agent 返回一些需要在运行时设置~/.xinitrc的环境变量,并且从,环境变量在整个 X 会话中都是恒定的。