
Я создаю скрипт для полной автоматизации настройки 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.