仅针对特定用户的 SSH 身份验证绕过密码身份验证

Posted

技术标签:

【中文标题】仅针对特定用户的 SSH 身份验证绕过密码身份验证【英文标题】:SSH authentication bypass password auth for a particular user only 【发布时间】:2019-08-26 12:15:07 【问题描述】:

我正在尝试构建一个连接到其他服务器的 bash 脚本,以进行一些基本的监控,例如检查磁盘空间并通过电子邮件发送此信息。我仍然需要所有这些服务器都需要用户一般进入/访问的密码,但是对于这个特定的监控脚本,我不想被要求输入密码(仅限通用 ssh 密钥)

如何配置特定用户(让我们称之为monitor)使用以下命令连接到服务器但不要求输入密码(因为它将用于 cron,因此需要自动化)

// ssh 到 web1 服务器并获取磁盘空间

cmd=$(ssh web1 df -h | grep -E "xvda1|xvde1" | awk 'print $5;' | sort -r | head -1)

假设服务器有 3 个用户 'monitor'、'bob' 和 'paul'

当它遇到脚本的这一部分时,ssh web1 会强制我输入密码 - 是否可以设置特定用户(在本例中为 monitor 用户)以便能够使用 ssh some-ip 进行身份验证和登录不要求输入密码,但在bobpaul 尝试登录时仍然要求输入密码?

【问题讨论】:

请将您的问题移至Super User(在此处删除,在此处重新发布)。这是off-topic here。 【参考方案1】:

是的,这很简单:只需为 monitor 用户创建一个 SSH 密钥 (ssh-keygen),然后将其私钥复制到其他服务器 (ssh-copy-id SERVER-IP-OR-NAME)。

只要检查PubkeyAuthentication在服务器上是启用的,但默认是启用的...

这样用户 monitor 将在不询问密码的情况下登录,其他用户将需要他们的密码。

【讨论】:

【参考方案2】:

有可能,您必须将RSA 密钥复制到服务器并启用RSA 身份验证。

您可以使用ssh-keygen 并按照说明生成密钥,然后使用ssh-copy-id 将其复制到服务器并在服务器上启用PubkeyAuthentication。一定要重启sshd.service

资源:openSSH docs

【讨论】:

以上是关于仅针对特定用户的 SSH 身份验证绕过密码身份验证的主要内容,如果未能解决你的问题,请参考以下文章

仅针对经过身份验证的用户的 Django 缓存

绕过对用户名/密码的 JConsole 要求 - 当使用带有 JMX 的 Jaas 自定义登录模块来处理授权和身份验证时

绕过特定请求后,身份验证对象为空

设计无需密码的身份验证,仅使用用户名

如何绕过特定域的经过身份验证的端点上的弹簧安全性?

发送用于 HTTP 身份验证的用户名和密码