当我第一次学习如何制作ssh密钥时,我阅读的所有教程都指出应该选择一个好的密码短语。但是最近,当设置一个需要ssh到另一台计算机的守护进程时,我发现唯一不需要每次启动都进行身份验证的密钥的方法(似乎)是创建一个空的密钥。密码短语。所以我的问题是,使用没有密码短语的密钥有什么问题?
当我第一次学习如何制作ssh密钥时,我阅读的所有教程都指出应该选择一个好的密码短语。但是最近,当设置一个需要ssh到另一台计算机的守护进程时,我发现唯一不需要每次启动都进行身份验证的密钥的方法(似乎)是创建一个空的密钥。密码短语。所以我的问题是,使用没有密码短语的密钥有什么问题?
Answers:
没有密码短语的密钥依赖于其他任何人都无法获得该密钥(谁也无法获得它可以访问的资源)。因此,如果密钥授予对它旁边一台计算机的访问权限,并且两台计算机具有相同的电子和物理安全级别,那么这没什么大不了的。
另一方面,如果您的密钥位于安全性较差的机器上(也许它具有许多不受信任的用户,可能在物理上易于访问,或者未及时更新其修补程序),那么您可能不会不想在那儿保留无密码短语的密钥。
归根结底,这取决于您对设置的信心并权衡这样做的风险/成本–如果您可以确信,攻击者获得密钥的访问实际上比获得密钥给您访问的资源更不现实,那就很好。如果您没有这种信心,则应该修复原因:)
另一种解决方案,在提高安全性的同时使您更轻松,因此您不必一直输入密码:
如果要加密私钥,则可以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会话中都是恒定的。
ssh-agent
并使用ssh -A -i privkey user@host
它,它将允许ssh代理转发,这将允许您从初始服务器访问服务器,而无需将私钥放在第一台服务器上。即使不启用ssh密钥转发,也不建议使用ssh链接,并且ssh -A
有其自身的安全性问题。服务器上的密钥没有密码短语,因此没有理由不能对服务器上的密钥进行加密。
对于自动访问,正如您所说的那样,它需要无密码短语的密钥,我总是使用authenticated_keys的其他选项(请参见sshd(8))来限制可以运行的命令。
通常,我在远程端提供一个精心编写的脚本,该脚本恰好完成了我希望被允许的工作(或工作-它可以查看参数)。
然后,我还将其锁定到可以使用该密钥进行连接的IP地址(不是100%可靠的,但是也可以使用命令限制。)
如果您想使用ssh来执行任何类型的自动化程序-我在特别考虑Nagios检查-那么您可能不希望使用密码短语。
在这种情况下,您可能不会在LAN外部使用它,并且将密钥安全地存储在服务器上以执行该过程。
大多数讨论SSH的教程都将期望人们从外部网络(可能是从不安全的计算机)登录,在这种情况下,建议是正确的。
基本上,除非您知道有充分的理由不这样做,否则请创建一个密码短语。懒得每次都不能输入密码可能是您的一个充分理由:-)