Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variables d'environnement avec su -c

2 réponses
Avatar
Grand'Pa
Bonjour/soir à tous,

Je souhaite simplifier la création de paires de clés SSH pour mes
utilisateurs et j'ai donc créer (entre autre) la ligne suivante :
su utilisateur -c "ssh-keygen -qt dsa -N '' -C $USER -f ~/.ssh/$USER.dsa"

Mon problème, c'est que la variable $USER garde la valeur du compte qui
lance le su (root, dans mon cas) au lieu de prendre la valeur du compte
qui lance la commande (utilisateur, dans mon exemple).
Le plus troublant, c'est que la commande suite me renvoi le bon résultat :
su utilisateur -c "set | grep USER"

Avez-vous une explication et une solution à ce problème ? Car après avoir
bien cherché, je reste bloqué. :(

Merci d'avance pour vos avis éclairés.
--
Franck PIERRE : grand-pa@grand-pa.dyndns.org
Site SME-Fr : http://sme-fr.homelinux.net
Site photos : http://grand-pa.myphotos.cc

2 réponses

Avatar
Matthieu Moy
Grand'Pa writes:

su utilisateur -c "ssh-keygen -qt dsa -N '' -C $USER -f ~/.ssh/$USER.dsa"


Ton shell va faire l'expansion du $USER en premier (les $VARIABLES
entre guillemets doubles sont expansées), et su ne verra même pas
qu'il y avait une variable ici.

Avez-vous une explication et une solution à ce problème ? Car après
avoir bien cherché, je reste bloqué. :(


Essaye avec des guillemets simples. ou alors, met la variable qui
correspond à ton utilisateur dans le shell appelant (le même que le
« utilisateur » que tu met en premier argument de « su »).

--
Matthieu

Avatar
Grand'Pa
su utilisateur -c "ssh-keygen -qt dsa -N '' -C $USER -f ~/.ssh/$USER.dsa"


Ton shell va faire l'expansion du $USER en premier (les $VARIABLES
entre guillemets doubles sont expansées), et su ne verra même pas
qu'il y avait une variable ici.


En effet ! J'aurais dû y penser !

Essaye avec des guillemets simples. ou alors, met la variable qui
correspond à ton utilisateur dans le shell appelant (le même que le
« utilisateur » que tu met en premier argument de « su »).


J'avais bien pensé aux guillemets simples (quotes), mais je ne les avais
mis qu'autour des variables, et pas autour de la commande.

[ ~]# su toto -c "echo '$USER'"
root
[ ~]# su toto -c 'echo $USER'
toto

C'était bien ça. Merci beaucoup !

--
Franck PIERRE :
Site SME-Fr : http://sme-fr.homelinux.net
Site photos : http://grand-pa.myphotos.cc