当您尝试连接到错误的服务器时,您的 SSH 密码是否被泄露?

vfc*_*sts 191 password ssh

当您不小心尝试使用密码凭据连接到错误的服务器时,管理员是否有可能读取并记录您使用的密码?

Ste*_*ris 215

简单地说:是的

更多详情...

如果您连接到我的机器,那么您不知道我运行的是普通ssh服务器,还是经过修改以写出传递密码的服务器。

此外,我不一定需要修改sshd,但可以编写一个 PAM 模块(例如使用pam_script),它将传递您的密码。

所以,是的。 切勿将您的密码发送到不受信任的服务器。机器的所有者可以轻松地将其配置为记录所有尝试使用的密码。

(事实上​​,这在信息安全领域并不少见;设置一个蜜罐服务器来记录尝试的密码)

  • 使用公钥/私钥对的另一个原因...... (117认同)
  • 更好的建议:**永远不要对 ssh 使用密码 auth**。出于很好的理由,该协议具有公钥身份验证;用它! (44认同)
  • 正确的。默认情况下,标准的 `sshd` 不会_不_记录密码。(如果您输入密码作为登录名,则会被记录,但这是另一个问题)。标准的“sshd”是一种安全工具,因此不会像这样记录凭据:-) (14认同)
  • @vfclists 登录到错误的服务器也正是您的 sshd 客户端为每个服务器存储指纹的原因。当您第一次连接时,您接受该指纹,然后如果它不匹配,您会收到一个巨大的警告,您应该注意。 (10认同)
  • 我一直想知道我对密码的使用有一段时间了,最​​近我突然意识到,尝试登录到错误的服务器将是向恶意服务器管理员泄露我的密码的好方法。 (3认同)
  • 或者您可以将站点添加到您的 .ssh/config 并避免拼写错误和类似问题......甚至可以将 bash 设置为自动完成已知服务器,因此按 TAB 是另一种避免输入错误的方法...... (3认同)
  • 登录错误服务器的风险也是为每个服务器使用不同密码的一个很好的理由。实际上,这需要使用软件保险库来记住它们。但这确实消除了这种风险。 (2认同)
  • @ivanhoe:这并没有真正的帮助,因为您仍然可以将密码发送到错误的服务器(例如,将您的内部服务器密码发送到廉价托管公司的服务器)。即使您信任运行您发送它的服务器的任何人,您是否相信他们不会被其他记录密码的人所破坏?等等。公钥认证不受所有这些问题的影响。 (2认同)

ilk*_*chu 52

是的。

密码是在建立加密连接后发送的,但远程服务器以明文形式获取密码。

如果您关心这一点,最好和最简单的解决方案是使用 SSH 密钥。

如果您的机器无法接受密钥,那么一种解决方案是创建一个安全存储密码的工具,然后sshpass根据您连接的服务器始终发送正确的密码。


现在,密码以明文形式发送的原因是它将处理和存储它的所有决定都留给了远程端,客户端可能完全愚蠢。在过去十年左右的时间里,Linux 和 BSD 系统中使用了几种不同的密码散列(存储)格式(crypt(3)),它们都不需要客户端的支持。

虽然这也部分是因为历史(即它一直都是这样)。有更好的质询-响应身份验证协议,甚至可以使用密码。例如SRP,它在身份验证期间为各方提供共享秘密。它已经在一些 SSH 服务器上实现了,但是 OpenSSH 的补丁是针对(非常)旧版本的。

  • 密码_通常_以“明文”形式发送(即实际上并非明文,而仅具有底层 SSH|TLS|任何连接提供的保护)。如果系统要求在客户端对密码进行散列并发送散列,则服务器将无法获得实际密码,并且[将向任何可以提供密码散列的人授予访问权限](https:// en.wikipedia.org/wiki/Pass_the_hash),使所述哈希值_password-equivalent._ (8认同)

小智 11

为了建立在 Stephen Harris 的回答之上,这是我构建的一个实时视图,它显示了修改后的 PAM 身份验证脚本在通过 ssh(一种蜜罐)连接到一个盒子时能够捕获的内容。我使用 PAM 库 lib-storepw 的修改版本。

https://livesshattack.net

https://livesshattack.net/about

  • 如果链接不可用,主要是链接的答案会被拒绝(听起来您个人维护这个网站,但仍然如此)。您应该向读者描述一下您是如何使用身份验证脚本进行管理的。 (4认同)