可以将SSH密钥与空密码一起使用吗?


34

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

Answers:


38

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

另一方面,如果您的密钥位于安全性较差的机器上(也许它具有许多不受信任的用户,可能在物理上易于访问,或者未及时更新其修补程序),那么您可能不会不想在那儿保留无密码短语的密钥。

归根结底,这取决于您对设置的信心并权衡这样做的风险/成本–如果您可以确信,攻击者获得密钥的访问实际上比获得密钥给您访问的资源更不现实,那就很好。如果您没有这种信心,则应该修复原因:)


只有受信任的人才能使用密钥访问机器,因此我想这回答了我的问题。谢谢。
mozillalive,2010年

11

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

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

例如,您可以kill使用存储的密钥,ssh-agent -k也可以使用以下方式分配密钥在内存中的有效期ssh-agent -t [seconds]:如果您不想永远解密密钥,但是想在主机周围进行很多切换,则可以将超时设置为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

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


是的-我知道我只需要上传公共密钥。只是我将一台服务器连接到另一台服务器,所以才提到这一点。但是,谢谢您写出这个清晰而周到的答案。
mozillalive,2010年

好吧,如果您使用ssh-agent并使用ssh -A -i privkey user@host它,它将允许ssh代理转发,这将允许您从初始服务器访问服务器,而无需将私钥放在第一台服务器上。即使不启用ssh密钥转发,也不建议使用ssh链接,并且ssh -A有其自身的安全性问题。服务器上的密钥没有密码短语,因此没有理由不能对服务器上的密钥进行加密。
cpbills 2010年

3

您可以看看我问过的有关Web服务器SSL私钥的类似问题。基本上,有三种选择:

  1. 使用文件系统权限保护密钥。
  2. 使用受密码保护的密钥,并在每次重新启动时手动输入密钥。
  3. 使用受密码保护的密钥,并将密钥存储在文件系统中以自动重启。

他们每个人都有缺陷,所以这一切都取决于您最担心的是什么。


1

对于自动访问,正如您所说的那样,它需要无密码短语的密钥,我总是使用authenticated_keys的其他选项(请参见sshd(8))来限制可以运行的命令。

通常,我在远程端提供一个精心编写的脚本,该脚本恰好完成了我希望被允许的工作(或工作-它可以查看参数)。

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


优点-如果您发现有必要使用不受保护的密钥,那么最好的办法就是将其锁定!
MikeyB 2010年

1

只要您没有其他人可以访问该密钥,就不需要密码。实际上,您不能对自动软件使用的密钥使用密码短语。


0

如果您想使用ssh来执行任何类型的自动化程序-我在特别考虑Nagios检查-那么您可能不希望使用密码短语。

在这种情况下,您可能不会在LAN外部使用它,并且将密钥安全地存储在服务器上以执行该过程。

大多数讨论SSH的教程都将期望人们从外部网络(可能是从不安全的计算机)登录,在这种情况下,建议是正确的。

基本上,除非您知道有充分的理由不这样做,否则请创建一个密码短语。懒得每次都不能输入密码可能是您的一个充分理由:-)


即使他们从外部网络登录,也有什么不同?只有客户端计算机的安全很重要,密码短语是在客户端处理的,对吗?
njsg 2013年

直到您的客户端笔记本电脑被盗并习惯于破坏您的边界之前,任何人才有机会撤销SSH密钥。密钥上的密码短语将给您更多时间来撤消密钥。
dunxd

因此,就像我说的那样,“只有客户端计算机的安全才重要”。
njsg 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.