значение канала для sed и использовать его в строке замены - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь программно сгенерировать пользователя и пароль, затем хэшировать пароль и сохранить его в конфигурационном файле grub.

У меня сейчас есть

# add a superuser account and password for the bootloader
## generate a secure password
pw=$(openssl rand -base64 32)

## create the new user for the bootloader and set the password as the secure password
useradd grub2superuseraccount
echo $pw | passwd grub2superuseraccount --stdin

## store the password to a TEMP file (needed to pass the password to grub2_mkpassword-pbkdf command, it will be deleted after)
cat << END >> ~/pfile
$pw
$pw
END

## generate the password hash and store it in the bootloader config file
cat ~/pfile | grub2-mkpasswd-pbkdf2 | sed -i "/password_pbkdf2/a password_pbkdf2 $THEVALUEOFTHEOUTPUTFROMTHEPIPE"

## delete the file with the password
rm ~/pfile 

Как мне передатьхэшировал вывод пароля из 'grub2-mkpasswd-pbkdf2' в команду sed?

ИЛИ

Если есть другой способ сделать это более элегантно, как бы я поступил так?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Вот рефакторинг, который также избегает надоедливого временного файла.

pw=$(openssl rand -base64 32)
useradd grub2superuseraccount
# Notice proper quoting
echo "$pw" | passwd grub2superuseraccount --stdin
# Collect output into a variable
grubpw=$(printf '%s\n' "$pw" "$pw" | grub2-mkpasswd-pbkdf2)
# Use the variable in sed -i
sed -i "/password_pbkdf2/a password_pbkdf2 $grubpw" conffile

В вашем вопросе не указано имя conffile, поэтому замените его на имя файла, который вы действительно хотите запуститьsed -i on.

Если вывод grub2-mkpasswd-pdkdf2 может содержать символы новой строки или другие проблемные символы, возможно, добавьте некоторые экранирующие символы в переменную.

Если вы действительно действительно хотите использовать канал, может быть, посмотрите в xargs.

printf '%s\n' "$pw" "$pw" |
grub2-mkpasswd-pbkdf2 |
xargs -i sed -i "/password_pbkdf2/a password_pbkdf2 {}" conffile
0 голосов
/ 13 февраля 2019

Как я могу передать вывод хэшированного пароля из 'grub2-mkpasswd-pbkdf2' в команду sed?

С помощью подстановки команды, не требуются каналы:

sed -i "/password_pbkdf2/c password_pbkdf2 $(grub2-mkpasswd-pbkdf2 < ~/pfile)" your_grub.conf

Обратите внимание, что я слегка изменил вашу команду sed, используя c на c , чтобы перетянуть всю строку в следующую команду вместо a, который a ppendsсовершенно новая линия.

0 голосов
/ 13 февраля 2019

Вы можете использовать GNU / Bash read для удовлетворения ваших потребностей, например:

cat ~/pfile | grub2-mkpasswd-pbkdf2 | (read THEVALUEOFTHEOUTPUTFROMTHEPIPE && sed -i "/password_pbkdf2/a password_pbkdf2 $THEVALUEOFTHEOUTPUTFROMTHEPIPE")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...