J'essaie de générer un utilisateur et un mot de passe par programme, puis je hache le mot de passe et je le stocke dans le fichier de configuration grub
J'ai actuellement ceci
# 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
Comment puis-je Je passe la sortie du mot de passe haché de 'grub2-mkpasswd-pbkdf2' à la commande sed?
OU
S'il y a une autre façon de faire cela plus élégamment, comment pourrais-je procéder faire ça?
3 Réponses :
Vous pouvez utiliser GNU / Bash read
pour répondre à vos besoins, par exemple:
cat ~/pfile | grub2-mkpasswd-pbkdf2 | (read THEVALUEOFTHEOUTPUTFROMTHEPIPE && sed -i "/password_pbkdf2/a password_pbkdf2 $THEVALUEOFTHEOUTPUTFROMTHEPIPE")
Voici un refactoring qui évite également le fichier temporaire embêtant.
printf '%s\n' "$pw" "$pw" | grub2-mkpasswd-pbkdf2 | xargs -i sed -i "/password_pbkdf2/a password_pbkdf2 {}" conffile
Votre question n'indique pas le nom de conffile
donc évidemment le remplacer par le nom de le fichier sur lequel vous voulez réellement exécuter sed -i
.
Si la sortie de grub2-mkpasswd-pdkdf2
peut contenir des retours à la ligne ou d'autres caractères problématiques, peut-être ajouter quelques échappements à la variable.
Si vous avez vraiment besoin d'un tube à utiliser, peut-être regardez dans xargs
.
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
Cela a l'air beaucoup plus élégant en effet, je vais essayer cela! Merci pour les réponses rapides à vous tous
J'ai mis à jour la question avec votre contribution si vous êtes intéressé, merci encore!
Votre question doit rester strictement une question. Si vous souhaitez ajouter une réponse de votre choix, vous pouvez le faire. (Vous pouvez récupérer vos modifications à partir de l ' historique des révisions. )
Comment puis-je transmettre la sortie du mot de passe haché de 'grub2-mkpasswd-pbkdf2' à la commande sed?
Via la substitution de commande, aucun tube nécessaire:
sed -i "/password_pbkdf2/c password_pbkdf2 $(grub2-mkpasswd-pbkdf2 < ~/pfile)" your_grub.confNotez que j'ai légèrement modifié votre commande
sed
, en utilisantc code > pour c accrocher la ligne entière à ce qui suit la commande, au lieu de
a
qui a ajoute une ligne entièrement nouvelle.
@Inian Désolé, je parlais de substitution commande . Merci pour la capture.
Vous pouvez probablement utiliser la substitution de processus pour atteindre votre objectif.
J'utilise cet exemple qui le permet apparemment github.com/ryran /burg2-mkpasswd-pbkdf2/blob/master/README.md
Si votre script contient de toute façon la variable en mémoire, faire en sorte que le script écrive le mot de passe dans un fichier n'améliore pas vraiment la sécurité.