unix - 仅针对特定用户的 SSH 身份验证绕过密码身份验证
问题描述
我正在尝试构建一个连接到其他服务器的 bash 脚本,以进行一些基本的监控,例如检查磁盘空间并通过电子邮件发送此信息。我仍然需要所有这些服务器都需要密码才能让用户进行一般进入/访问,但是对于这个特定的监控脚本,我不想被问到密码(仅限通用 ssh 密钥)
如何配置特定用户(让我们称之为monitor
)使用以下命令连接到服务器但不询问密码(因为它将用于 cron,因此需要自动化)
// ssh 到 web1 服务器并获取磁盘空间
cmd=$(ssh web1 df -h | grep -E "xvda1|xvde1" | awk '{print $5};' | sort -r | head -1)
假设服务器有 3 个用户“监视器”、“鲍勃”和“保罗”
当它到达脚本的这一部分时,会ssh web1
强制我输入密码 - 是否可以设置特定用户(在本例中为monitor
用户)以便能够在ssh some-ip
不要求输入密码的情况下进行身份验证和登录,但仍然要求输入密码bob
或paul
尝试登录时的密码?
解决方案
是的,这很简单:只需为监控用户创建一个 SSH 密钥(ssh-keygen
),然后将其私钥复制到其他服务器(ssh-copy-id SERVER-IP-OR-NAME
)。
只需检查PubkeyAuthentication
在服务器上是否启用,但默认情况下已启用...
这样用户监视器将无需询问密码即可登录,其他用户将需要输入密码。
推荐阅读
- inno-setup - Inno 设置抛出错误“没有找到匹配的文件”即使是艰难的文件也在那里
- c# - WPF DataBinding:在 CLR 属性中使用 SetCurrentValue?
- xamarin - 徽章计数未显示在 Xamarin 表单中
- scala - Couchbase scala 可观察的 n1ql 查询结果缺少扩展函数的参数类型 ((x$12) => x$12.rows())
- mysql - 从 3 个不同的表中选择项目
- visual-studio-code - VS Code - 在当前 cmd 中运行批处理的任务
- scala - 在不遍历或堆栈溢出的情况下将 Traversable[T] 转换为 Stream[T]
- stata - 从不同的命令返回一个矩阵
- c# - 如何将字符串拆分为正则表达式的非常数(C#)
- java - 从java中给定的可下载链接获取输入流