有关OpenSSH配置的大多数指南都建议禁用密码身份验证,而建议使用基于密钥的身份验证。但是在我看来,密码身份验证具有显着的优势:无需钥匙即可从任何地方进行连接的能力。如果始终与强密码一起使用,则这不会带来安全风险。还是应该?

评论

密码是一种可以被嗅探,猜测和重播的单因素身份验证。密钥(可能)是两个因素。在某些系统上,仅凭一个因素就可以从任何地方登录都是不可接受的。

#1 楼

基于pw或基于密钥的身份验证有优点和缺点。例如,在某些情况下,基于密钥的身份验证不如密码身份验证安全。在其他情况下,其基于密码的安全性较低。在某些情况下,一种方法更方便,而在其他情况下,则更少。

全部归结为这一点:当您执行基于密钥的身份验证时,必须使用密码短语来保护密钥。除非您正在运行ssh-agent(每次使用ssh-agent都会使您不必输入密码),否则在便利方面您一无所获。安全性是有争议的:现在,攻击媒介已从服务器转移到您,您的帐户或个人计算机(...)-可能会或可能不会更容易被破坏。决定这个时的包装盒。在安全性上获得或放松取决于您的环境和其他措施。

编辑:哦,刚刚看到您在谈论家庭服务器。我处在相同的情况下,“密码”或“带有钥匙的USB记忆棒”总是和我在一起吗?我选择了前者,但将SSH侦听端口更改为不同于22的端口。这阻止了所有那些la脚的脚本小子强行强制整个网络范围。

评论


在许多情况下,将SSH端口从22更改可能根本不是一个好主意。 adayinthelifeof.nl/2012/03/12/…

–提姆克
17-2-20在13:26



#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...


使用密钥,您还可以授予某些用户(例如顾问)对服务器的临时访问权限,而无需透露该特定帐户的密码。顾问完成工作后,即可删除临时密钥。

评论


非常非常有用的提示。

– Sachin Divekar
2011年11月24日14:15

与使用Keys相比,与在终端上手动键入的密码相比,使用Keys就像拥有2000个字符的长密码(从技术上讲,它的强度甚至更高):D

– Abhishek Dujari
11年11月24日在16:23

关于SSH身份验证的两个非常有用的技巧,但实际上并没有为我回答这个问题...

–MikeMurko
2011年12月2日,16:12

如果要强制经过密码验证的用户执行特定命令,请更改其登录外壳。另外,“在不透露密码的情况下允许临时访问”是一个非常糟糕的主意。有数百种不同的方法可以保留该访问权限以供以后使用。

–b0fh
2015年5月21日在6:52

仅最后一段回答了IMO问题-密钥允许进行细化吊销,而使用密码则需要告知每个人您正在对其进行更改。

–́Riking
17年2月21日,在1:24

#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 楼

您已部分回答了您的问题-攻击者可以连接的位置越多,攻击者就越有可能通过暴力破解(考虑DDoS)侵入您的服务器。

还要将密码的长度与密钥大小(通常为数千位)。

评论


96位的熵表示一个80个字符的密码(如果使用英语书写); 15个字符(如果它是来自可打印字符集的乱码)。您确定自己的ssh密码那么长/强吗?

– MadHatter
2011年11月24日12:34

如果您有多个带有96位熵的密码,而这些密码不会受到字典攻击,那么您可能仍然需要使用某种密码管理软件,因此您实际上会失去使用密码的所有可访问元素。

–尼克·唐顿
2011年11月24日13:31

@SachinDivekar只有在使用集合[a-zA-Z]中的随机密码时才具有96位的熵,如果它是英语单词则不然。

–日本长者
2011年11月24日15:51

@NickDownton-您可以使用一个不错的长密码,而无需借助keypass软件。像mywifesnameisangelaandshehasanicebutt之类的东西对于字典攻击是无法抗拒的,它非常强大,并且很容易记住,但是却无法猜测。如果您需要将密码提供给您的妻子,那么如果果仁巧克力点获得了奖励,则它会附带奖励。

–马克·亨德森(Mark Henderson)
2011-11-25 1:36



抱歉,马克,但这是错误的。您提供的密码短语有37个字符,因此大约有44位熵,它比7个可随机打印的字符弱,并且很容易受到攻击。有关详细信息,请阅读Wikipedia上有关克劳德·香农(Claude Shannon)著作的文章,但其结果是英语的书写是高度可预测的-例如,在“ mywifesname”之后,几乎可以肯定“ is”一词。对于涉及单词的强密码,从词典中串在一起的四个随机单词将为您提供10 ** 23的可能性,这大约是77位熵。仍然不是很好,但还不错。

– MadHatter
2011年12月1日上午8:38

#5 楼

使用密码登录时,会将密码传输到服务器。这意味着服务器的操作员可以修改SSHD来访问您的密码。使用公共密钥身份验证,他们无法获得您的私有密钥,因为只有您的公共密钥每次都进入服务器。

评论


当由于错字而连接到错误的服务器时,这一点尤其重要。例如,在某个时间点,.cg是通配符,指向启用了ssh的一台计算机。每当您将.cg误输入.ch时,最终都将连接到该框并泄露密码...

–b0fh
2015年5月21日在6:59

确实是@ b0fh。据我所知,这是通过在ssh中使用密码引入的唯一真正的漏洞。如果有人已经拥有您要连接的服务器,或者可以欺骗您要连接的IP地址(MITM),则您已经迷路了。

–滚刀
19年7月19日在17:08

#6 楼

ssh密钥可以防止中间人对您的密码进行攻击。

,当您尝试使用密钥登录时,服务器将根据您的公共密钥构造一个挑战并将其发送给您的客户端。
这将解密它并构造一个适当的响应以发送。

您的私钥将永远不会发送到服务器,并且任何监听的人都无法做任何事情,除非拦截该单个会话。

使用密码,他们将为您提供凭据。这使我能够:
万一密钥丢失,可以轻松地撤回该密钥。
限制它允许我访问哪些服务器
并仍然随身携带

虽然安装挂载软件很麻烦(truecrypt)

评论


错了一旦知道了服务器的公钥(如果将其添加到缓存中并且在第一个连接上未获得MITM的操作,便会这样做),您就可以免受MITM攻击。基于密钥/密码的身份验证与此无关。密码永远不会通过网络以明文方式发送,始终在用户级身份验证(您的密码/向我证明此公用密钥是您的身份)之前建立计算机级身份验证(您/我的公用密钥)的安全连接。

–托马斯
13年7月23日在12:37

托马斯(Thomas),实际上许多人都忽略了有关指纹更改的警告。即使服务器的私钥以某种方式受到破坏或人为的类型为“是”,Pubkey auth仍可保证MITM保护:攻击者必须在无法查看流量和发送无法登录的公共密钥之间进行选择,这是一种赢得。

–Score_Under
13年8月24日在13:26

对于回答者:您不必使用truecrypt,openssh私钥带有其自己的可选的基于密码的加密。

–Score_Under
13年8月24日在13:27

#7 楼

正如@MartinVejmelka所说,这是一种折衷。自己的PC,或将密钥放在USB记忆棒或类似设备上。
如果很长很容易被遗忘
可以肩膀冲浪

键长几个数量级,并且在任何时候都不显示,因此避免了这三个问题。

评论


但是使用密钥文件会增加丢失笔式驱动器或使用的任何存储空间的问题。

–JoãoPortela
11年11月24日在16:59

此时可以删除丢失的密钥,并添加新密钥。使用密码(尤其是共享密码)可能会给我带来极大的痛苦,并且会带来很多痛苦。

– SplinterReality
2011-11-25 3:19

我的(最近退休的)密码之一:08Forging2?seminal * ^ Rajas-(位置/ |。它是随机生成的,但我记得它没有问题。还有运气,可以用它进行冲浪或强行使用。

– Finnw
2012年2月5日14:07

@finnw正确的马电池装订:-) security.stackexchange.com/q/6095/485

–Rory Alsop
2012年2月5日在16:17

#8 楼



考虑到您已经使用强密码保护了基本知识,我认为最大的风险是许多计算机都安装了键盘记录器,而用户却没有意识到。甚至甚至有人在创建包含木马的有用实用程序的整个站点,因此对我们所有人来说,这都是可能的。例如,键盘记录程序会将登录详细信息通过电子邮件发送给黑客,然后黑客便可以轻松访问服务器。

我最近被诺顿警告过要下载Zombee Mod安装程序(而不是jar,即安装程序)以增加航班。到Minecraft罐子里我查看了详细信息,诺顿在此站点上列出了很多标记为包含木马的实用程序。我不知道这是正确还是错误,但是它对于文件名非常明确。众所周知,木马在分发之前先放入(一些)warez中。

#9 楼

SSH优于密码的一个潜在好处是,如果您不指定SSH密码,则无需再次输入密码……您的计算机在服务器上本质上是受信任的,因为它具有密钥。就是说,我通常总是使用SSH密码,因此我认为这是有好处的。我引用,


如果您不认为这很重要,请尝试记录下周获得的所有恶意登录尝试。我的计算机-完全是普通的台式机-仅在上个星期就进行了4,000次以上的猜测来猜测我的密码,并且进行了近2500次的侵入尝试。您认为在攻击者偶然发现您的密码之前需要进行成千上万的随机猜测吗?和数字...您可能会同意密码验证。另外,如果您打算监视日志,并且无论如何都不会通过网络进行“超级安全”的操作,即将其用于家庭服务器。然后,一定可以使用密码。

#10 楼

Passwd auth方法确实不安全(imho)。通过这种机制,密码将被传输到sshd服务器(就像@ramon已经说过的那样)。这意味着某些人可以修改sshd服务器以检索密码。借助中间人攻击,在本地网络中非常容易实现。

您只需安装此补丁即可对sshd服务器进行补丁(https://github.com/jtesta / ssh-mitm)。使用arpspoofiptables将已打补丁的服务器置于客户端和真实的sshd服务器之间。

请禁用密码身份验证:打开配置文件/etc/ssh/ssh_config并添加行PasswordAuthentication no

评论


SSH客户端不检查服务器的RSA指纹吗?在至少一次向该特定服务器发送数据之后,它的指纹将被记住,因此在可能的MITM攻击情况下,SSH会发出警告,不是吗?

–七卦
17年5月21日在14:29

是的出现警告,但由于99%的时间是由于重新安装操作系统,配置更改了ecc引起的,大多数用户将忽略警告并继续操作。

– Pioz
17年5月21日在14:32

@Septagram许多Shell帐户提供者都不习惯于为新的订户发布当前的服务器密钥指纹,也不会将用户帐户迁移到新的服务器等。

–达米安·耶里克(Damian Yerrick)
18年1月16日在14:24

#11 楼

您可以使用-o StrictHostKeyChecking=no选项绕过。在外壳程序脚本中使用ssh时,这非常有用。

ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o PasswordAuthentication=no -o ConnectionAttempts=5 xxUser@xxxHost