大多数OpenSSHconfiguration指南build议禁用密码authentication,以支持基于密钥的authentication。 但在我看来,密码authentication有一个显着的优势:能够从绝对的任何地方连接而无需密钥。 如果一直使用强密码,这不应该是一个安全风险。 还是应该?
有pro和con的pw或基于密钥的身份validation。
例如,在某些情况下,基于密钥的身份validation不如密码身份validation安全。 在其他情况下,其基于pw的安全性较差。 在某些情况下,其中一种更方便,而另一些则更less。
这一切归结为:当你做基于密钥的authentication时,你必须用密码保护你的密钥。 除非你没有运行ssh-agent,否则你每次都无法input密码,在方便方面你没有任何收获。 安全是有争议的:现在攻击媒介从服务器转移到你,你的帐户,或你的个人机器,… – 这些可能或不容易打破。
决定这个时候,在盒子外面思考。 无论您是否在安全方面获得或放宽取决于您的环境和其他措施的其余部分。
编辑:哦,只是看到你在谈论家庭服务器。 我是在同一个情况下,“密码”或“带钥匙的USB记忆棒”总是和我在一起? 我去了前者, 但把SSH的监听端口改成了22以外的东西。这就阻止了所有那些蹩脚的脚本小子蛮横的强制整个networking范围。
与密码login相比,使用ssh密钥有一个独特的function:可以指定允许的命令。 这可以通过在服务器上修改~/.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...
使用密钥,您还可以授予对服务器某些用户(如顾问)的临时访问权限,而不会泄露该特定帐户的密码。 顾问完成工作后,临时密钥可以被删除。
您只需在networking中允许进行密码validation即可获得两全其美的效果。 将以下内容添加到sshd_config
的末尾:
PasswordAuthentication no Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 PasswordAuthentication yes
您已经部分地回答了您的问题 – 攻击者可以连接的位置越多,通过暴力破解就可以侵入您的服务器的可能性就越大(考虑DDoS)。
还要比较密码长度和密钥大小(通常是数千比特)。
用密码login时,将密码传输到服务器。 这意味着服务器的操作员可以修改SSHD以访问您的密码。 使用公钥authentication,他们无法获得您的私钥,因为只有您的公钥才会进入服务器。
这是一个权衡,正如@MartinVejmelka所说。
您使用基于密钥的身份validation的原因是密钥远远高于当前或近期的暴力破解,您需要来自您自己的PC,或者将密钥放在USB存储棒或类似设备上。
密码有以下问题:
一个关键是数量级更长,并没有显示在任何一点,所以它避免了这三个问题。
ssh密钥防止中间人攻击你的密码。
当您尝试使用密钥login时,服务器将根据您的公钥构build一个挑战并将其发送给您的客户端。 这将解密它并构build一个适当的响应发送。
您的私钥永远不会被发送到服务器,并且任何正在侦听的人都无法做任何事情,除非拦截单个会话。
用密码他们将有你的凭据。
我的解决scheme是在USB密钥的encryption分区上使用合适格式的便携式ssh密钥。 这使我能够:
在丢失的情况下轻松收回该密钥。
限制它允许我访问哪些服务器
并仍然带着它
虽然安装装载软件是一个痛苦(truecrypt)
SSH对密码的一个潜在好处是,如果您不指定SSH密码,那么您再也不必再input密码了…您的计算机在服务器上本质上是受信任的,因为它具有密钥。 也就是说,我通常总是使用SSH密码,所以我认为这是有利的。
我find了最好的答案,为什么用户指南经常推荐SSH密码authentication来自Ubuntu手册SSHOpenSSHKeys。 我引用,
如果您不认为这很重要,请尝试logging下一周您获得的所有恶意login尝试。 我的电脑 – 一台完全普通的台式电脑 – 在上个星期就有超过4000次尝试猜测我的密码和近2500次的闯入尝试。 你认为在攻击者绊倒你的密码之前需要多less次随机猜测?
基本上,如果你有一个坚实的高密度的标点符号,大写和小写字母,数字…你可能会确定密码validation。 另外,如果你打算监视你的日志,而不是在整个networking上做“超级安全”的东西,也就是把它用于家庭服务器。 那么通过一切手段,密码运作良好。
这里已经提到好点了。
我认为最大的风险,因为你用一个强大的密码来处理基础知识,很多计算机都安装了键盘logging器,而用户却没有意识到这一点。 甚至有人创build包含特洛伊木马的有用工具的整个站点,所以它可能发生在我们最好的。 例如,键盘logging器会将login详细信息发送给黑客,然后轻松访问服务器。
我最近被Norton警告说要下载Zombee Mod的安装程序(不是jar,安装程序),以增加飞行到Minecraftjar子。 我查看了详细信息,Norton列出了许多标记为包含特洛伊木马的公用程序。 我不知道这是否是正确的,但它是非常具体的文件名。 木马在被分发之前被放入(某些)软件中也是一个已知的事实。
passwd auth方法确实是不安全的(imho)。 通过这种机制,密码将被传输到sshd服务器(就像@ramon已经说过的那样)。 这意味着有些人可以修改sshd服务器来检索密码。 在中间人攻击中,在本地networking内部很容易实现。
你可以通过安装这个补丁来修补sshd服务器( https://github.com/jtesta/ssh-mitm )。 使用arpspoof
和iptables
把你的补丁服务器放在客户端和真正的sshd服务器之间。
请禁用密码validation:打开configuration文件/etc/ssh/ssh_config
并添加PasswordAuthentication no
。
你可以绕过-o StrictHostKeyChecking=no
选项。 在shell脚本中使用ssh时,这非常有用。
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o PasswordAuthentication=no -o ConnectionAttempts=5 xxUser@xxxHost