大多数 OpenSSH 配置指南都建议禁用密码验证,转而采用基于密钥的验证。但在我看来,密码验证有一个显著的优势:无需密钥即可从任何地方进行连接。如果始终使用强密码,这应该不会带来安全风险。或者应该吗?
答案1
pw 或基于密钥的身份验证都有优点和缺点。
例如,在某些情况下,基于密钥的身份验证较少的比密码验证更安全。在其他情况下,基于 pw 的验证不太安全。在某些情况下,前者更方便,而在其他情况下,后者则不太方便。
归根结底,当你进行基于密钥的身份验证时,你必须使用密码保护您的密钥。除非您运行 ssh-agent(ssh-agent 让您无需每次都输入密码),否则您在便利性方面一无所获。安全性是有争议的:攻击媒介现在从服务器转移到您、您的帐户或您的个人机器,(...) - 这些可能更容易破解,也可能不容易破解。
在做决定时,要跳出固有的思维模式。安全性方面的获益或受损取决于您的其余环境和其他措施。
编辑:哦,我刚看到你在谈论家庭服务器。我也遇到过同样的情况,“密码”或“带有密钥的 USB 记忆棒”总是在我身边?我选择了前者但将 SSH 监听端口更改为 22 以外的其他端口。这可以阻止所有那些蹩脚的脚本小子对整个网络范围进行暴力破解。
答案2
使用 ssh 密钥与密码登录相比有一个独特的功能:您可以指定允许的命令。这可以通过修改~/.ssh/authorized_keys
服务器上的文件来完成。
例如,
command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...
只允许使用该特定密钥执行命令“/usr/local/bin/your_backup_script.sh”。
您还可以指定密钥允许的主机:
from="yourclient,yourotherclient", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...
或者将两者结合起来:
from="yourbackupserver", command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...
使用密钥,您还可以授予某些用户(例如顾问)对服务器的临时访问权限,而无需透露该特定帐户的密码。顾问完成其工作后,可以删除临时密钥。
答案3
通过仅允许在网络内进行密码验证,您可以同时实现两全其美。将以下内容添加到您的末尾sshd_config
:
PasswordAuthentication no
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
PasswordAuthentication yes
答案4
ssh 密钥可防止中间人对您的密码进行攻击。
当您尝试使用密钥登录时,服务器将根据您的公钥构建一个质询并将其发送给您的客户端。客户端将对其进行解密并构建适当的响应以发送。
您的私钥永远不会被发送到服务器,并且任何监听的人除了拦截该单个会话之外都无法做任何事情。
只要有密码,他们就能获得您的凭证。
我的解决方案是在 USB 密钥的加密分区上放置一个合适格式的便携式 ssh 密钥。这样我可以:
在密钥丢失的情况下轻松收回该密钥。
限制它允许我访问的服务器
,并且仍随身携带它
虽然安装挂载软件很麻烦(truecrypt)