如何从 ssh root 确认 linux root 密码?

如何从 ssh root 确认 linux root 密码?

如何检查远程机器的 root 密码?

我有一台通常通过 ssh root 和其他用户访问的远程计算机。出于安全目的,我有一个脚本可以从中央服务器定期更改所有密钥和用户密码。

对于非 root 用户,密码会像这样更新。

ssh -i a_priv_key root@ip "echo 'user:NEWPASS' | chpasswd"

我检查它实际上已经改变了。

ssh -i b_priv_key user@ip "echo NEWPASS | sudo -S ls /root"

但是,如果我想对 root 用户执行相同的操作,我就会陷入困境。 sudo -S ls /root 总是返回包含任何密码的列表,因为我们只是以 root 身份 ssh 到远程计算机。

如果我们以用户身份 ssh 登录,则会提示输入用户密码。

我一直在尝试使用 su user && su root 获取某些内容,因为我注意到它会提示输入 root 密码,但无法像上面那样编写脚本。

来自 root shell 的“login root”也将始终提示输入密码,但我也无法编写明文密码的脚本。

我已阅读此问题,但希望有一种内置方法来完成此操作,而不是编写必须安装在远程计算机上的自定义应用程序。 Linux下如何查看密码?

答案1

如果sudo可以选择在目标计算机上进行配置,那么您可以设置rootpw某些特定命令,这会sudo要求输入 root 密码而不是用户密码。例如,您可以在文件中添加以下行 /etc/sudoers.d/lsrootpw(并sudo根据需要重新启动服务)

Defaults!/bin/ls        rootpw

这样,除 root 之外的任何用户在执行操作时sudo ls都会被询问 root 密码而不是他们自己的密码。因此,您可以测试

ssh -i b_priv_key root@ip su user sudo -S ls /root <<< "NEWPASS"

这会以一种方式或另一种方式进行,具体取决于密码是否NEWPASS正确root。该测试需要目标上有 sudo 用户。

或者,如果你有 Debian 的runuser命令,你可以像nobody下面这样使用:

ssh -i b_priv_key root@ip runuser -u nobody -- sudo -S ls /root <<< "NEWPASS"

根据密码的正确性,这也应该始终产生两个不同的结果。特别是,正确的密码会导致抱怨密码nobody不存在于sudoers文件中。尽管您可以通过在/etc/sudoers.d/lsrootpw.

当然,总而言之,这与自定义应用程序没有太大区别,因为它需要在目标主机上安装某些内容。同时,这一切都可以通过五个远程命令序列来完成(添加lsrootpw、重新启动sudo、进行测试、删除lsrootpw并再次重新启动 sudo)

相关内容