我有两台机器,每台机器都有相同的用户组。我在一台机器上有一个脚本,我想在两台机器上都更改密码。
因此,我生成一个随机密码,然后对其进行哈希处理,并将其传递给 usermod 命令,如下所示:
usermod -p PASSWORD_HASH USER
ssh REMOTE_USER@REMOTE_HOST sudo usermod -p PASSWORD_HASH USER
REMOTE_USER 有权使用 sudo 执行该命令,而无需密码。
结果是,密码在本地机器上成功更改,我可以通过尝试立即验证:
su USER
我还检查了 /etc/shadow 文件,看起来哈希确实存储正确。
但是,如果我跳转到另一台机器并尝试以 USER 身份登录,则无法进入。我收到身份验证错误。如果我以超级用户权限登录远程机器并检查 /etc/shadow 文件,密码哈希完全是乱码,没有任何意义。
但是,如果我在远程计算机上执行完全相同的命令而不通过 ssh,则使用
sudo usermod -p PASSWORD_HASH USER
那么一切都正常了。
我的问题:
这里是否缺少了一些细节,导致 usermod 命令由于某种原因无法通过 ssh 运行?
答案1
请参阅相关答案带引号的 ssh 命令。简而言之,SSH 将其后面的内容作为字符串传递,而不是作为参数列表传递,因此请将其括在引号中。并且您可能希望&&
在最后一个 sudo 之前插入一个。