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

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

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

答案1

没有密码的密钥依赖于没有其他人能够获得该密钥(无论如何,其他人也无法获得它所允许访问的资源)。因此,如果密钥允许访问旁边的一台机器,并且两台机器具有相同级别的电子和物理安全性,那么这实际上就没什么大不了的。

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

归根结底,这取决于您对设置的信心以及权衡这样做的风险/成本——如果您可以非常有信心地认为攻击者获取密钥的权限实际上并不比获取密钥授予您的资源的权限更容易,那么您就没问题了。如果您没有这种信心,您可能应该解决导致这种情况的原因 :)

答案2

另一种解决方案,增强了安全性,同时让您更轻松,这样您就不必一直输入密码:

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

您可以kill使用存储密钥,ssh-agent -k并且可以为密钥在内存中指定一个生存期,例如ssh-agent -t [seconds];如果您不想永远保持密钥解密,但又想在主机上进行大量 ssh 操作,则可以将超时设置为 5-10 分钟。这样您就不必不断输入密钥的密码。

再次强调,这一切都与您对 /workstation/ 的安全性有多自信有关,如果您是唯一有权访问它的人,并且您有一个非常安全的本地密码,并且您不会邀请漏洞和 rootkit,那么您的无密码私钥是相当安全的。

如果你像我一样,将私钥保存在拇指驱动器上,你肯定会想要加密它,即使它只是一个私钥(与我在工作站上使用的私钥是分开的,因此,如果我丢失了密钥,我可以轻松地从我的服务器~/.ssh/authorized_keys列表中删除拇指驱动器的公钥,这也带来了一个/极好/的理由来为你的公钥添加有用的注释)

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

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

if [ -x /usr/bin/ssh-agent ]; then
   eval $(/usr/bin/ssh-agent)
fi

我将对的调用ssh-agent包装起来,eval因为 ssh-agent 返回一些在运行时需要设置的环境变量,并且从运行~/.xinitrc,环境变量在整个 X 会话期间保持不变。

答案3

对于自动访问,正如您所说,需要无密码密钥,我总是使用 authorized_keys 的额外选项(请参阅 sshd(8))来限制可以运行的命令。

通常我会在远程端提供一个精心编写的脚本,该脚本可以完成我想要允许的工作(或多项工作——它可以查看参数)。

然后我还将其锁定到可以使用该密钥连接的 IP 地址(不是 100% 万无一失,但命令限制也可以。)

答案4

只要除了您之外没有人可以访问密钥,您就不需要密码。事实上,您不能在自动化软件使用的密钥上使用密码。

相关内容