automatiser sudo avec echo et read

Le
bernard schoenacker
bonjour,

je souhaite automatiser la connection sudo et je pense
employer echo et read :

exemple de base :

sudo apt-get update --fix-missing
echo toto
read toto

est ce correct ?


slt
bernard

--
bernard schoenacker <bernard.schoenacker@free.fr>
'fortune -e'
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel Caillibaud
Le #26420997
Le 19/12/16 à 12:57, bernard schoenacker BS> je souhaite automatiser la connection sudo et je pense
BS> employer echo et read :
Pas compris
BS> exemple de base :
BS>
BS> sudo apt-get update --fix-missing
cette commande lance apt si le user qui lance le script est dans sudoers (s inon demande le pass)
BS> echo toto
affiche "toto"
BS> read toto
attend une saisie utilisateur qui sera affectée à la variable toto
BS> est ce correct ?
Je sais pas ce que tu veux faire, mais si c'est un script qui se connecte e n ssh pour lancer un
update ou upgrade, il vaut mieux ajouter la clé ssh du user qui lancer a le script directement au
root de la machine sur laquelle le lancer, éventuellement avec un shel l de ton cru pour ne
lancer que les commandes auquel il a droit.
Par ex, dans le /root/.ssh/authorized_keys de la machine concernée
command="/root/bin/mon-shell-a-moi.sh",no-port-forwarding,from="ip auto risées" ssh-rsa laClé
et dans /root/bin/mon-shell-a-moi.sh un truc du genre
#!/bin/bash
case "$SSH_ORIGINAL_COMMAND" in
ping) echo "pong";;
apt-update) apt-get update --fix-missing;;
# autres commandes autorisées
…
# par défaut un message (ici il donne la commande mais c'est pas obl igatoire évidemment)
*) echo "Commande « $SSH_ORIGINAL_COMMAND » non autorisée" >&2; exit 1;;
esac
et tu testes avec `ssh ping` qui devrait afficher pong.
--
Daniel
L'argent a rendu l'homme esclave et
personne ne fera de l'argent son esclave.
Gilles Olive
Daniel Caillibaud
Le #26420998
Le 19/12/16 à 13:12, Daniel Caillibaud DC> Le 19/12/16 à 12:57, bernard schoenacker DC> BS> je souhaite automatiser la connection sudo et je pense
DC> BS> employer echo et read :
DC>
DC> Pas compris
DC>
DC> BS> exemple de base :
DC> BS>
DC> BS> sudo apt-get update --fix-missing
DC> cette commande lance apt si le user qui lance le script est dans sudoer s (sinon demande le
DC> pass)
DC>
DC> BS> echo toto
DC> affiche "toto"
DC>
DC> BS> read toto
DC> attend une saisie utilisateur qui sera affectée à la variable toto
DC>
DC> BS> est ce correct ?
DC>
DC> Je sais pas ce que tu veux faire, mais si c'est un script qui se connec te en ssh pour
DC> lancer un update ou upgrade, il vaut mieux ajouter la clé ssh du u ser qui lancera le script
DC> directement au root de la machine sur laquelle le lancer, éventuel lement avec un shell de
DC> ton cru pour ne lancer que les commandes auquel il a droit.
Sinon, sudo a une option -S pour lire le pass depuis stdin, donc
echo toto | ssh 'sudo -S uneCommande'
devrait marcher, mais c'est moyen de taper un pass en clair en console (ici le pass toto
s'affiche à l'écran et restera visible dans ton historique)
--
Daniel
Les racistes, quand il n'y a qu'un ça va. C'est quand il y en a beauco up
qu'il y a des problèmes...
bernard schoenacker
Le #26420996
On Mon, 19 Dec 2016 13:12:01 +0100
Daniel Caillibaud
Le 19/12/16 à 12:57, bernard schoenacker
BS> je souhaite automatiser la connection sudo et je pense
BS> employer echo et read :
Pas compris
BS> exemple de base :
BS>
BS> sudo apt-get update --fix-missing
cette commande lance apt si le user qui lance le script est dans
sudoers (sinon demande le pass)
BS> echo toto
affiche "toto"
BS> read toto
attend une saisie utilisateur qui sera affectée à la variable toto
BS> est ce correct ?
Je sais pas ce que tu veux faire, mais si c'est un script qui se
connecte en ssh pour lancer un update ou upgrade, il vaut mieux
ajouter la clé ssh du user qui lancera le script directement au root
de la machine sur laquelle le lancer, éventuellement avec un shell de
ton cru pour ne lancer que les commandes auquel il a droit.
Par ex, dans le /root/.ssh/authorized_keys de la machine concernée
command="/root/bin/mon-shell-a-moi.sh",no-port-forwarding,from="ip
autorisées" ssh-rsa laClé
et dans /root/bin/mon-shell-a-moi.sh un truc du genre
#!/bin/bash
case "$SSH_ORIGINAL_COMMAND" in
ping) echo "pong";;
apt-update) apt-get update --fix-missing;;
# autres commandes autorisées

# par défaut un message (ici il donne la commande mais c'est pas
# obligatoire évidemment)
*) echo "Commande « $SSH_ORIGINAL_COMMAND » non autorisée" >&2;
exit 1;; esac
et tu testes avec `ssh ping` qui devrait afficher pong.
--
Daniel
L'argent a rendu l'homme esclave et
personne ne fera de l'argent son esclave.
Gilles Olive

bonjour,
après quelques tatônements :
cat>script-connect.sh<<EOF
#!/bin/bash
# script-connect.sh
# set chmod 644
sudo apt-get update --fix-missing
read toto
echo $
EOF
merci pour tout
slt
bernard

--
bernard schoenacker
bernard schoenacker
Le #26421021
On Mon, 19 Dec 2016 13:16:31 +0100
Daniel Caillibaud
echo toto | ssh 'sudo -S uneCommande'

bonjour,
j'ai essayé et c'est un échec, qui peut me trouver une astuce ?
je continue de chercher
slt
bernard
--
bernard schoenacker
Francois Lafont
Le #26421059
Bonsoir,
On 12/19/2016 05:17 PM, bernard schoenacker wrote:
Daniel Caillibaud
echo toto | ssh 'sudo -S uneCommande'

bonjour,
j'ai essayé et c'est un échec, qui peut me trouver une astuce ?
je continue de chercher

Personnellement je n'ai pas trop compris où il était question
de ssh dans le premier message (assez laconique) de ce fil. En
revanche, je peux confirmer que l'option -S (ou --stdin) indiquée
par Daniel fait bien le job de lire le mot de passe sudo sur stdin.
Par exemple :
~$ whoami
flaf
~$ pwd='mauvais-mot-de-passe'
~$ printf '%sn' "$pwd" | sudo --stdin --prompt='' touch /tmp/test
Sorry, try again.
sudo: 1 incorrect password attempt
~$ ls -l /tmp/test
ls: cannot access /tmp/test: No such file or directory
~$ pwd='le-bon-mot-de-passe'
~$ printf '%sn' "$pwd" | sudo --stdin --prompt='' touch /tmp/test
~$ ls -l /tmp/test
-rw-r--r-- 1 root root 0 Dec 20 01:26 /tmp/test
Il faut se méfier de "echo" pour envoyer le mot de passe, surtout
si celui-ci contient des caractères « exotiques » et plutôt utiliser
printf comme ci-dessus qui est plus robuste par rapport à ça.
--
François Lafont
bernard schoenacker
Le #26421060
On Tue, 20 Dec 2016 01:30:54 +0100
Francois Lafont
Bonsoir,
On 12/19/2016 05:17 PM, bernard schoenacker wrote:
Daniel Caillibaud
echo toto | ssh 'sudo -S uneCommande'

bonjour,
j'ai essayé et c'est un échec, qui peut me trouver une astuce ?
je continue de chercher

Personnellement je n'ai pas trop compris où il était question
de ssh dans le premier message (assez laconique) de ce fil. En
revanche, je peux confirmer que l'option -S (ou --stdin) indiquée
par Daniel fait bien le job de lire le mot de passe sudo sur stdin.
Par exemple :
~$ whoami
flaf
~$ pwd='mauvais-mot-de-passe'
~$ printf '%sn' "$pwd" | sudo --stdin --prompt='' touch /tmp/test
Sorry, try again.
sudo: 1 incorrect password attempt
~$ ls -l /tmp/test
ls: cannot access /tmp/test: No such file or directory
~$ pwd='le-bon-mot-de-passe'
~$ printf '%sn' "$pwd" | sudo --stdin --prompt='' touch /tmp/test
~$ ls -l /tmp/test
-rw-r--r-- 1 root root 0 Dec 20 01:26 /tmp/test
Il faut se méfier de "echo" pour envoyer le mot de passe, surtout
si celui-ci contient des caractères « exotiques » et plutôt utiliser
printf comme ci-dessus qui est plus robuste par rapport à ça.
--
François Lafont


bonjour,
merci beaucoup, la syntaxe est correcte même pour d'autres
instructions (apt-get update)
slt
bernard
--
bernard schoenacker
Publicité
Poster une réponse
Anonyme