[SHELL]

Fermé
Gopher - 4 avril 2005 à 17:54
 SKZ81 - 5 avril 2005 à 01:31
Bonjour à tous.

Je suis en train d'écrire un scripts en shell /bin/sh pour plateformes Linux (RH AS3 et Slack).
J'utilise une connexion SSH par échanges de clés.
Je voudrai écrire la clé publique de mes clients (RH AS3) dans le fichier .ssh/authorized_key2 (Slack 10) de manière unique.
En bref, si la clé est déjà dans le fichier, je voudrai ne pas l'écrire de nouveau. Or je n'arrive pas a construire un test valide pour cela.
Ci-dessous une partie de mon script :
mykey=`cat ${pwdhome}/.ssh/id_rsa.pub`

ssh secure@xxx.xxx.xxx.xxx \
"if [ "$(grep "${mykey}" .ssh/authorized_keys2)" != "" ];then echo "${mykey}" >> .ssh/authorized_keys2;fi"


Le test ne fonctionne pas et me renvoi "no such file or directory" concernant .ssh/authorized_keys2

Or la commande :
ssh secure@xxx.xxx.xxx.xxx \
"grep "${mykey}" .ssh/authorized_keys2)" 

fonctionne parfaitement.

Merci de l'attention que vous porterez à cette question.

PS : Je n'utilise pas ssh-copy-id car il n'est pas disponible sur tous les postes clients.
A voir également:

2 réponses

Je viens de résoudre mon probleme qui comme a chaque fois qu'un probleme est résolu, parait simple.

Voilà ce que j'ai fini par écrire :
ssh secure@xxx.xxx.xxx.xxx "cat .ssh/authorized_keys2 | grep '${mykey}'  || echo "${mykey}" >> .ssh/authorized_keys2" &> /dev/null


Je me passe de cette vilaine condition "if" et le remplace par un "||" de réalisation sur échec. Parafait donc .
Merci à ceux qui aurront pris la peine de lire mon post.
0
"$(grep "${mykey}" .ssh/authorized_keys2)" != ""

T'as pas l'impression de comparer deux chaines de caractère directement ?
tu voulais pas écrire quelque chose du genre :

`$(grep "${mykey}" .ssh/authorized_keys2)` != ""


(Ceci dis, j'ai rien testé...)
0