如何检查远程机器的 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)