Изменить пароль в режиме headless

Изменить пароль в режиме headless

Я создаю скрипт для полной автоматизации настройки VPS, и мне нужно изменить пароль root. Я бы хотел избежать его ввода, так как скрипт работает через SSH.

Есть ли способ перенаправить произвольное значение на вход passwdкоманды?

РЕДАКТИРОВАТЬ

Я знаю, что passwd < passwd_file.txtпароль должен быть указан дважды... Я хотел бы узнать, есть ли более элегантный способ, так как использование временного файла для этой цели кажется немного неуклюжим.

решение1

Вы не указали, какую версию UNIX вы используете, но на странице руководства passwd(1) для Linux указано следующее:

   --stdin
          This option is used to indicate that passwd should read the  new
          password from standard input, which can be a pipe.

Итак, все, что вам нужно сделать, это запустить:

echo 'somepassword' | passwd --stdin

Отредактируйте, чтобы добавить: более портативным является chpasswdтот, который существует (по крайней мере) как в Red Hat, так и в Ubuntu:

echo 'someuser:somepassword' | chpasswd

См. страницу руководства.

решение2

Я думаю, вам будет трудно сделать то, что вы хотите. Команда passwdделает все возможное, чтобы избежать именно той ситуации, которую вы описываете, чтобы помешать любым схемам подбора пароля и обойти множество потенциальных проблем безопасности.

Можете ли вы использовать useraddкоманду? Обычно в Linux useraddесть опция "-p" или "--password", которая позволяет вам задатьзашифрованныйпароль к некоторому значению. Вы можете получить этот зашифрованный пароль из файла /etc/shadow.

Другой вариант — повозиться с файлом /etc/shadow. Это не должно быть слишком сложно использовать sedили что-то изменить, чтобы соленый, зашифрованный пароль root.

решение3

Да! Нашел способ. printfспас меня:

HOST=...
echo "Root password? " && read -r ROOT_PASSWORD
...
ssh root@$HOST <<EOF
    printf "$ROOT_PASSWORD\n$ROOT_PASSWORD\n" | passwd
EOF

Для меня это лучший выход: чистый и абсолютно безопасный, поскольку пароль никогда не попадет ни на локальный, ни на удаленный хост в открытом виде (только через SSH-соединение).

решение4

Вы можете обернуть tmux вокруг passwd:

tmux new-session -ds chpwd passwd
tmux send-keys -t chpwd NEWPASSWORD$'\n'
tmux send-keys -t chpwd NEWPASSWORD$'\n'

Конечно, запускать от имени root.

Связанный контент