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

automatiser sudo avec echo et read

6 réponses
Avatar
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'

6 réponses

Avatar
Daniel Caillibaud
Le 19/12/16 à 12:57, bernard schoenacker a écrit :
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
Avatar
Daniel Caillibaud
Le 19/12/16 à 13:12, Daniel Caillibaud a écr it :
DC> Le 19/12/16 à 12:57, bernard schoenacker .fr> a écrit :
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...
Avatar
bernard schoenacker
On Mon, 19 Dec 2016 13:12:01 +0100
Daniel Caillibaud wrote:
Le 19/12/16 à 12:57, bernard schoenacker
a écrit :
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
Avatar
bernard schoenacker
On Mon, 19 Dec 2016 13:16:31 +0100
Daniel Caillibaud wrote:
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
Avatar
Francois Lafont
Bonsoir,
On 12/19/2016 05:17 PM, bernard schoenacker wrote:
Daniel Caillibaud wrote:
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
Avatar
bernard schoenacker
On Tue, 20 Dec 2016 01:30:54 +0100
Francois Lafont wrote:
Bonsoir,
On 12/19/2016 05:17 PM, bernard schoenacker wrote:
Daniel Caillibaud wrote:
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