IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Script shell - gestion user, touche entrée


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut Script shell - gestion user, touche entrée
    Bonjour à tous,

    Je voudrais faire un script permettant d’effectuer une commande de sauvegarde. Cette commande peut s’effectuer uniquement lorsque l’on est placé dans un compte précis. La solution serait qu’il y ait une condition des le début du script du genre :
    Ici, user = toto

    Si
    Connecté en tant que toto
    Faire la commande de sauvegarde

    Sinon
    Se connecter en tant que toto
    Demande de mot de passe : donc entrer mot de passe

    Faire la commande de sauvegarde

    Je découvre le shell et je demande votre aide pour la syntaxe (où met on les ; etc .. et voir quoi corriger). Pour ma part je vois ça comme ça :
    La commande de sauvegarde étant longue, je l’ai abrégé en un mot « save »

    If echo $USER == “toto”
    Then
    save ;
    Else
    Su toto;
    Demande de mot passe : indiquer xxx // comment faire ?
    Save ;

    fi

    Problème :
    Si l’utilisateur courant n’est pas toto, il faut qu’il se connecte en tant que toto mais normalement sous linux lorsque l’on change de user, une fois tapée « su user », le mot de passe est demandé. Je ne vois pas comment gérer cela via le script. Il s’agit d’une saisie clavier. De plus je voudrais savoir comment simuler la touche « entrée » ?

    Merci beaucoup de votre aide

    Cordialement,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    en fait c est beaucoup plus simple que ça, le travail t est directement maché par 'su':

    le script est connect.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh
     
    if [ $USER = toto ]
    then echo "je save"
    else
    su toto
    connect.sh
    fi
    tu appelles ton script
    si tu n es pas toto le script appelle su toto et la commande su gère la frappe du mot de passe etc .. ensuite le script rappelle le meme script (recursivité) tant que le user n'est pas toto

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Merci d'avoir répondu ashin.

    Je vais tester ta proposition.
    As tu une idée pour la touche entrée en script ?
    La commande de sauvegarde, une fois lancé, neccessite une saisie
    au clavier qui est la touche entrée.
    Comment peut on effectuer cela en via un script ?
    y a t il une ligne de code permettant de "simuler" la touche entrée ?

    Cordialement,

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    la c est plus compliqué je pense parce que si tu lances un programme pour sauvegarder, ton shell va attendre qu il finisse donc aucun moyen d'interférer avec ton programme.

    donc il faudrait le lancer en tache de fond, attendre qu il ait fini, envoyer la touche entrée.
    je ne t assure de rien sur ce coup là.


    envoie le code de ton programme de save si tu veux

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    la commande est celle ci : ontape -s -L 0 (zero)
    Il s'agit d'une commande de sauvegarde de base de donnée sous linux.
    Cela génère un fichier faisant 6 Giga.
    Une fois cette commande tapée, il est demandé de taper entrée. Si l'on ne fait, la sauvegarde ne s'effectue pas.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    joker

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Si quelqu'un sait comment "simuler" la touche entrée via un script je suis preneur.
    Rappel: le script effectue en gros une commande de sauvegarde. Lorsque cette auvegarde est effectuée, il est demandé d'appuyer sur la touche entrée pour continuer la sauvegarde.
    Je veux rendre cette sauvegarde de facon automatique via un script. Donc au lieu que l'utilisateur presse la touche entrée , c'est le script qui demande de le faire.
    Je bute sur la saisie au clavier automatique via un script .

    Je me demande d'ailleurs cette opération est possible.

    Cordialement,

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    une commande de redirection de STDIN devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ontape -s -L 0 (zero) <<EOF
    EOF
    devrait "simuler" un "return"
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Merci de ta réponse MarcG, je vais tester pour la sauvegarde.
    Je voudrais revenir sur la gestion des users via le script.
    voici le code :

    #!/bin/sh

    if [ $USER = toto ]
    then mkdir /home/Desktop/reptest ;
    else
    su toto
    script.sh
    fi

    Rappel : je souhaite faire une commande uniquement si je suis sur un compte précis.
    Ici j'ai exécuté le script en étant connecté sous le compte titi.
    Suite à lexécution la console me demande une saisie au clavier du mot de passe.
    Sachant que je voudrais que cela soit automatisé par le script.
    La commande su demande donc le mot de passe lorsqu'on l'utilise pour se connecter
    avec un user.

    Question y a t'il un moyen, dans ce cas, lorsque nous sommes pas connecté dans un compte précis, de pourvoir changer de compte et faire la commande souhaitée sans devoir effectuer une saisie au clavier et donc une tache automatique.
    Au pire, je pourrai indiquer le mot de passe dans le script meme si c'est moyen de faire ca.

    Merci de votre aide

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    #!/bin/sh

    if [ $USER = toto ]
    then mkdir /home/mister/Bureau/reptest;
    else
    su toto
    /etc/SCRIPT/script.sh
    fi

    Lorsque le script s'éxécute sur un compte différent, il me demande un mot de passe or
    je voudrais que cela soit automatique, sans que le user est à tapé quoi que ce soit

    Avez vous une idée ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    comment ça ?
    tu veux faire "su toto" sans qu il demande de mot de passe ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Le but c'est que je veux que le script s'éxécute uniquement sur un compte précis, exemple toto. Car la commande effectuée via ce script peut se faire uniquement sur un compte particulier sinon elle ne marche pas.

    Le script s'éxécutera tous les jours à 18h30. Il se peut que le serveur où se trouve le script soit manipulé et donc peut avoir comme conséquence des changements de compte user. Exemple : root, titi, tata. Et laissé comme tel.
    Lorsque le script s'éxécutera, en admettant que le compte courant suite au changement de compte, ne soit plus toto mais titi. Le script ne marchera pas.

    C'est pour cela que je dois vérifier si le compte courant est bien celui de toto pour que le script marche. Et lorsque que l'on veut changer de compte, le mot de passe est demandé. Peut être qu'il faudrait que je rentre le mot de passe dans le script et lui indiqué ca quand la demande est faite ...
    je ne sais pas

    Unique solution ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Points : 376
    Points
    376
    Par défaut
    ok d'accord je comprends mieux

    donc soit tu vires le mot de passe pour l'acces a toto
    soit tu fais en sorte que le script entre le mot de passe


    sinon pour la touche entrée ça marche ? parce que c est un peu le meme problème.

  14. #14
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Avec sudo. Dans ta configuration tu mets :
    ALL ALL=( toto ) NOPASSWD: /ton/script/de/sauvegarde.sh

    et tu lances ta commande avec sudo -u toto /ton/script/de/sauvegarde.sh

    Ton scripts aura toujours l'utilisateur toto et peut être lancé par tout le monde sans mot de passe.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  15. #15
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Ta proposition me convient tout à fait cependant peux tu me dire si c'est juste au niveau de la syntaxe (espace, notamment pour le ALL:
    ALL signifie tous les user, meme root? pourquoi deux fois ALL ?


    #!/bin/sh
    ALL ALL=( toto ) NOPASSWD: /etc/SCRIPT/script.sh
    if [ $USER = toto ]
    then mkdir /home/mister/Bureau/reptest;
    else
    sudo -u toto /etc/SCRIPT/script.sh
    fi


    Merci

  16. #16
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Le deuxième est pour la machine (dans le cas de configuration NIS ou LDAP).
    Mais du coups tu n'as plus besoin de faire le test "user == toto", tu peux juste lancer le script de sauvegarde avec sudo -u toto. Si c'est toto qui lance, l'utilisateur restera bon, sinon l'utilisateur sera toto-.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  17. #17
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    J'ai le message d'erreur suivant :

    titi@mister:/home/mister/Bureau$ /etc/SCRIPTS/script.sh
    /etc/SCRIPTS/script.sh: line 16: ALL: command not found
    mkdir: cannot create directory `/home/mister/Bureau/reptest': Permission denied
    [sudo] password for titi:


    voici le script :

    #!/bin/bash
    ALL ALL = toto NOPASSWD: /etc/SCRIPT/script.sh
    mkdir /home/mister/Bureau/reptest;
    sudo -u toto /etc/SCRIPT/script.sh

    J'ai fait plusieurs test, changer les lignes etc ... je ne trouve pas.
    Le résultat doit seulement créer le répertoire reptest dans le bureau et ce uniquement en étant dans le compte toto. Ici on est en tant que titi à la base. Bref voir description plus haut.
    Merci de votre aide.

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Bon , aprés plusieurs tentatives, je vais prendre la solution de mettre le mot de passe dans le script, et le faire interagir lorsque celui-ci est demandé lors de la connexion du user associé. C'est pas terrible mais ca me parait la plus simple à mettre en oeuvre.
    Donc ma question est la suivante :
    lorsque dans le script on se connecte en tant que toto, le mot de passe est demandé.
    comment via le script, je peux donner le mot de passe pour qu'il se connecte ?
    Puisqu'il y a une saisie clavier qui est demandé par la console
    PASSWD :

    #!/bin/sh

    if [ $USER = toto ]
    then mkdir /home/mister/Bureau/reptest;
    else
    su toto
    A COMPLETER ...// Comment faire interagir le password de toto 'aaa' par exemple lorsque la console nous le demande ?
    mkdir /home/mister/Bureau/reptest;
    fi


    Merci de votre aide

  19. #19
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    La ligne "ALL ALL=( toto ) NOPASSWD: /etc/SCRIPT/script.sh" doit se trouver dans le fichier de configuration de sudo. Tu modifies ce fichier avec la commande visudo, en root, et tu ajoutes cette ligne.
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  20. #20
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Aucun réslultat :

    J'ai ajouter la ligne suivante dans /etc/sudoers
    ALL ALL=( toto ) NOPASSWD: /etc/SCRIPT/script.sh

    voici le script donc

    #!/bin/sh
    sudo -u toto mkdir /home/mister/Bureau/reptest; // Est ce que c'est bien écrit ???
    _______________________________________________
    ET VOICI L'ERREUR :

    root@mister:~/Bureau# /etc/SCRIPTS/script.sh
    mkdir: cannot create directory `/home/mister/Bureau/reptest': Permission denied

    En effet Tchetch, le fichier /etc/sudoers pourrait résoudre mon problème
    j'ai pensé à mettre ca : toto ALL=(ALL) NOPASSWD:ALL
    Comme cela, pas besoin de mot de passe quand on se connecte en tant que toto.

    Pb : faut que toto soit en root ( avec le mot de passe de toto et non celui de root, nuance) , pourqu'il puisse créer un répertoire, d'où l'erreur Permission denied ci dessus.
    Et pour se mettre en root, en tant que toto, il faut entrer le mot de passe de toto. Donc encore une saisir au clavier.

    Question : Comment éviter cela ...?

Discussions similaires

  1. Script shell création user Password
    Par debdarky dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 05/08/2013, 10h28
  2. Script shell: afficher le texte entre 2 bornes.
    Par panchan173 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 18/07/2012, 16h24
  3. script shell : comparer 2 répertoires entre eux
    Par Chicna dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 19/09/2011, 18h42
  4. script shell et arguments en entrée
    Par Lolitaaa dans le forum Linux
    Réponses: 7
    Dernier message: 03/07/2010, 11h17
  5. [Shell] Bash : script de gestion d'utilisateurs
    Par techafi dans le forum Linux
    Réponses: 1
    Dernier message: 14/03/2008, 22h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo