У меня есть две машины, которые имеют ту же группу пользователей на каждом. У меня есть сценарий на одной машине, что я хочу изменить пароль на обеих машинах.
Так, я генерирую случайный пароль, затем хеширую его и передаю его команде usermod, как это:
usermod -p PASSWORD_HASH USER
ssh REMOTE_USER@REMOTE_HOST sudo usermod -p PASSWORD_HASH USER
REMOTE_USER имеет полномочия выполнить ту команду с помощью sudo, не требуя пароля.
Результат этого - то, что пароль успешно изменяется на локальной машине, которую я могу сразу проверить путем попытки:
su USER
Я также проверил/etc/shadow файл, и кажется, что хеш действительно хранится правильно.
Однако, если я перепрыгиваю к другой машине и попытке войти в систему как ПОЛЬЗОВАТЕЛЬ там, я не могу войти. Я получаю ошибку аутентификации. Если я вхожу в систему на удаленной машине с полномочиями суперпользователя и проверяю/etc/shadow файл, хэш пароля полностью искажен и не имеет никакого смысла.
Однако, если, в то время как на той удаленной машине, я выполняю ту же самую команду, не переходя ssh, с помощью
sudo usermod -p PASSWORD_HASH USER
Затем все работает просто великолепно.
Мой вопрос:
Есть ли некоторая деталь здесь, я отсутствую, который заставляет usermod команду NOT работать по ssh по некоторым причинам?
См. этот связанный ответ . Короче говоря, SSH передает то, что следует за ним как за строкой, не как список аргументов, поэтому включите его в кавычки. И можно хотеть вставить &&
, прежде чем это продлится sudo.