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

Shell et commandes GNU Discussion :

Comment intégrer mot de passe ssh (et ftp ) directement dans un script bash


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment intégrer mot de passe ssh (et ftp ) directement dans un script bash
    Je salut la communauté.

    Après plus de 24h passées à chercher la solution adéquate a mon problème, je me permet de soumettre mon cas sur ce forum.

    Dans le cadre professional je doit écrire un script pour acceder par ssh a un serveur pour faire certaines actions ( copier des fichiers dans un dossier puis ensuite envoyer ce dossier par ftp sur un autre server).
    Mon problème est que j'arrive pas à écrire directement le mot de passe ssh dans mon script bash (mais aussi le ftp pour envoyer mes fichiers).
    j'ai beau cherché , les solutions que je trouve ( 'expect' oubien 'utilisation de public key') ne s'appliquent pas dans mon cas Puisque je n'ai pas le droit de modifier QUOIQUE CE SOIT sur les serveur.

    Aider moi a integrer les mot de passe ssh (et ftp) directement dans mon script bash sans utiliser 'expect' ni crer une clé ssh .
    merci

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour et Bienvenue,

    Pour ssh:
    Si tu ne peux pas intégrer une clé ssh sur le serveur, il ne te reste plus qu'à passer par des outils tel que expect (celui-ci ne demande pas de modification sur le serveur).
    Mais es-tu sur que tu ne peux pas créer une clé ssh et la déposer dans le répertoire .ssh du home de l'utilisateur sur leque tu connectes sur le serveur ?

    Pour ftp:
    Certains clients ftp acceptent le passage du mot de passe, sinon il y a le fichier .netrc dans lequel tu peux fournir entre autre chose, le mot de passe.
    Mais est-ce un vrai serveur ftp ? ne serais-ce pas plutôt un sftp ?
    Cordialement.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 108
    Points
    108
    Par défaut
    Dans le pire des cas il y a "expect".

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    tu ne peux pas d'un côté demander l'usage d'un secure shell, et de l'autre t'affranchir de la règle la plus élémentaire de sécurité :
    «ne jamais mettre les mots de passe dans un script»
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    Je pense que le SSH ne t'est pas approprié. Si c'était seulement placer des fichiers sur le serveur, ce serait OK, mais dans ce que je comprends tu voudrais aussi que le serveur envoie des fichiers vers des clients.
    Pour utiliser un serveur SSH il faut y être autorisé. Si ttel est le cas et si tu ne veux pas de mot de passe, il te faut générer des clés sur ton client et placer la publique sur ton serveur
    Voici la méthode http://www.linuxtricks.fr/wiki/ssh-i...ragraph_mageia
    Débusqueur de bug et chercheur en améliorations

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    tu ne peux pas d'un côté demander l'usage d'un secure shell, et de l'autre t'affranchir de la règle la plus élémentaire de sécurité :
    «ne jamais mettre les mots de passe dans un script»
    exactement, il faut faire comme les vrais sysadmins et utiliser une clé ssh qui elle n'aura pas de mot de passe

    ou alors dire adieu à l'automatisation de ton SI, le moindre développeur qui pousse son code sur la machine de préproduction, le moindre backup automatisé, le moindre logiciel pour déployer type CFengine et autres tu peux oublier, la sécurité a ses limites on le sait bien...

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour
    Merci a tous pour vos reponses.

    Pour ssh:
    En fait je doit écrire sur un serveur A, un script qui se connect à un serveur B afin d'envoyer des fichiers à partir de ce serveur B vers un autre serveur C par SFTP (c'est bien SFTP et non FTP :merci pour la remarque) .

    il y a un dossier .ssh dans le home du serveur B . le problème est : pour ajouter quoique ce soit il faut demander la permission ( refus garanti a 99% ; en fait ils refusent systématiquement! pour des questions de sécurité). je vais quand même tenter à nouveau.

    Pour SFTP comment proceder pour s'authentifier automatiquement?
    Merci pour le support.

  8. #8
    Membre actif
    Homme Profil pro
    électronicien
    Inscrit en
    Octobre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : électronicien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2006
    Messages : 225
    Points : 236
    Points
    236
    Par défaut
    SFTP est une commande de SSH. Je te ferais toujours la même réponse. Fait des clés et places les sur tes serveurs.
    Débusqueur de bug et chercheur en améliorations

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par LampeRouge Voir le message
    SFTP est une commande de SSH. Je te ferais toujours la même réponse. Fait des clés et places les sur tes serveurs.
    oui, vois/essaye de négocier avec les admins, et si comme tu sembles le dire tu ne peux vraiment rien toucher sur les serveurs et que tu tiens malgré tout à automatiser le transfert vois comme te le disaient disedorgue et netmonk avec Expect

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour information, une clé ssh peut-être spécialisée pour ne pouvoir effectuer que des actions très spécifiques et rien d'autres.
    Donc si tu expliques à tes admins ce que tu veux très précisément, ceux-ci doivent-être capables de te fournir cette accès via clé (enfin, cela dépend de la compétence des admins, car sans être méchants, bien souvent les refus sont soit parce que la demande n'est pas claire, soit cela cache de l'incompétence).
    Sinon, il suffit de remonter à ta hiérarchie que ce n'est pas faisable sauf par de la bidouille qui remet en cause la sécurité car tu dois faire apparaître en clair des mots de passe dans des scripts.
    Cordialement.

  11. #11
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pour information, une clé ssh peut-être spécialisée pour ne pouvoir effectuer que des actions très spécifiques et rien d'autres.
    c'est dans le cadre d'une restriction d'accès par ssh ça, la clé peut-être associée (config coté serveur encore une fois) à 1 commande/script, mais de ce que je comprends dans son post initial il a déjà un shell non restreint (...) et cherche à effectuer un ensemble d'actions

    Donc si tu expliques à tes admins ce que tu veux très précisément, ceux-ci doivent-être capables de te fournir cette accès via clé
    je suis assez d'accord, ça semblerait même assez sain

    bien souvent les refus sont soit parce que la demande n'est pas claire, soit cela cache de l'incompétence
    hmm... j'en ai connu qui étaient simplement des connardschieurs aussi, et se faisaient un devoir d'alimenter la guégerre dev VS ops et de créer des "enjeux politiques" entre les entités, perso j'ai jamais rechigné à faciliter la vie de mes devs bien au contraire, mais quand c'est le relou qui est responsable de la plateforme ben tu te plies un peu à ses désidératas
    en revanche j'attendais des devs qu'ils sachent un peu ce qu'ils faisaient aussi et ne me demandent pas n'importe quoi, un dev que je sens fébrile, mal assuré ou carrément jemenfoutiste qui me demande un peu trop de liberté sur une machine à risque, si ça ne rentre pas dans le process standard y'a de bonnes chances que je lui dise non

    Sinon, il suffit de remonter à ta hiérarchie que ce n'est pas faisable sauf par de la bidouille qui remet en cause la sécurité car tu dois faire apparaître en clair des mots de passe dans des scripts.
    faut peut-être relativiser, un mot de passe en clair dans un fichier est aussi dangereux qu'une clé ssh sans mot de passe associé, si un pirate peut lire l'un il pourra voler l'autre

    pour prendre un métaphore boueuse, si on habite une maison bien gardée, avec des caméras un peu partout à l'extérieur, des mafieux qui font la ronde etc. laisser trainer ses bijoux sur la table du salon est relativement peu problématique, mais ça reste malgré tout un risque de se les faire voler, mais les mettre dans un coffre sans combinaison n'est pas plus sûr, quant au voleur, celui qui parvient jusque dans la maison malgré tout le dispositif en place est déterminé, et même un bon coffre ne lui fera pas peur

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour ce qui est de son accès, je suis d'accord, mais là, il semblerait qu'il veuille faire tourner un script périodiquement, donc la clé ssh restrictive semble la solution la plus adaptée à son besoin.

    Et rien n'empêche de "passphraser" sa clé et d'encapsuler tout ça dans un ssh-agent.

    Et comme de toute façon, il aura spécialisé correctement sa clé, au pire, elle ne sera utilisable que pour éffectuer l'opération à laquelle elle est destinée.
    Cordialement.

  13. #13
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    il semblerait qu'il veuille faire tourner un script périodiquement, donc la clé ssh restrictive semble la solution la plus adaptée à son besoin.
    non vraiment pas, comme son nom l'indique ça sert à faire une restriction des commandes que l'utilisateur peut lancer, au pire il aura meilleur compte de lancer un set de commandes directement par l'invocation de ssh, son but n'est pas de brider son shell à mon avis

    par ailleurs c'est une technique qu'on utilise pas trop en général, son problème étant que ce n'est pas souple, si l'on veut pouvoir restreindre à plus d'une commande ou si l'on veut lui passer des arguments on est obligé de faire un script interactif, au final c'est souvent plus simple de mettre un shell en bonne et due forme à l'utilisateur et gérer les droits du FS tout en lui donnant accès à une batterie de scripts

    Et rien n'empêche de "passphraser" sa clé et d'encapsuler tout ça dans un ssh-agent.
    oui effectivement c'est encore la solution la plus propre, mais l'agent est pris en compte dans un script ? je crois qu'il faut au minimum invoquer ssh-agent pour qu'il retourne des variables d'environnement à exporter de mémoire

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    non vraiment pas, comme son nom l'indique ça sert à faire une restriction des commandes que l'utilisateur peut lancer, au pire il aura meilleur compte de lancer un set de commandes directement par l'invocation de ssh, son but n'est pas de brider son shell à mon avis
    Son besoin est le suivant:
    Citation Envoyé par gabo1 Voir le message
    Dans le cadre professional je doit écrire un script pour acceder par ssh a un serveur pour faire certaines actions ( copier des fichiers dans un dossier puis ensuite envoyer ce dossier par ftp sur un autre server).
    Son script semble assez explicite et son besoin côté accès serveur semble assez spécifique aussi en mon sens pour que la clé soit spécialisée à son besoin.

    par ailleurs c'est une technique qu'on utilise pas trop en général, son problème étant que ce n'est pas souple, si l'on veut pouvoir restreindre à plus d'une commande ou si l'on veut lui passer des arguments on est obligé de faire un script interactif, au final c'est souvent plus simple de mettre un shell en bonne et due forme à l'utilisateur et gérer les droits du FS tout en lui donnant accès à une batterie de scripts
    En mon sens, c'est un tort de ne pas être restrictif pour le cas d'un script. Il faut prendre ce cas comme un tout: le demandeur doit connaitre son script local et le besoin de celui-ci sur le serveur distant (pour moi, le script n'est pas le fichier "script.sh" qui se trouve sur ma bécane, mais l'ensemble de la chaine).

    oui effectivement c'est encore la solution la plus propre, mais l'agent est pris en compte dans un script ? je crois qu'il faut au minimum invoquer ssh-agent pour qu'il retourne des variables d'environnement à exporter de mémoire
    Oui, c'est vrai, il faut lancer le ssh-agent, puis on peut utiliser ssh-add pour rajouter des clés qui celui-ci demandera de façon interactives les passphrases. Ensuite les process liés au ssh-agent pourront se connecter via ssh aux serveurs qui connaissent les clés publique des clés privées rajoutées par ssh-add.
    Cordialement.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à vous tous!
    on a finalement trouvé un terrain d'attente: il m'ont remis une machine pour en faire un serveur afin d'installer expect et d'exécuter mes scripts.

    Parlant de script, j'ai besoin d'aide pour recupérer le resultat d'une commande dans une variable avec expect;
    dans un script bash en faisant : count= ` ls -lrt | wc -l ` je recupère la valeur de la commande dans la variable $count .
    Mais avec expect j'ai du mal à le faire ( de plus les bon tuto sur expect sont difficile a trouver).


    Voici une partie du script Lorsque il ya plus de 4 fichier dans le dossier , le script crée un dossier et deplace les fichiers dans un dossier avant de les envoyer grace à sftp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/expect -f
     
    set timeout -1
    spawn $env(SHELL)
    match_max 100000
    send -- "ssh serveur@00.00.00.00\r"
    expect  "ssh serveur@00.00.00.00\r"
    Password: "
    sleep 1
    send -- "password\r"
     
      set count "[ls -lrt mon_fichier|wc -l]"   ------------------------------------> MON PROBLÈME COMMENCE A CE NIVEAU
    if { $count > 4 }  {
     
    var=$(date +%Y%m%d%H%M%S);
    send -- " mkdir cd /opt/$var\r";------------------------------> crée un dossier ayant $var comme nom
    sleep 2
    send -- "mv monfichier* cd /opt/$var\r";  ----------------->deplacer les fichiers dans le dossier crée
    sleep 2
    send -- "cd /opt/$var\r"; ----------------------> se placer dans le dossier crée
    sleep 2
    send -- "sftp serveur@00.00.00.00\r"; ---------------------> se connecter a sftp pour envoyer les fichiers
    sleep 2
    send -- "password\r";
    sleep 2
    send -- "mput *"; ------------------------> envoyer les fichiers
    sleep 8
    send -- "exit";
    }
    fi
    Merci de m'aider à évoluer.

  16. #16
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Tu mélanges différent langage là: tu fais du sh dans un script expect...
    Pour information, expect est un outils tcl, donc le langage à utiliser dans un script expect est tcl.
    Cordialement.

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonsoir
    Merci pour l'info.
    j'ai corrigé baucoup de choses dans le script.
    Mon probleme réside à la ligne 12 : comment pouvoir récupérer la valeur de cette commande dans une variable ?

    cordialement

  18. #18
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Juste une incursion pour rappeler les différents outils de la suite PuTTY, qui pourraient t'être fort utile ;-)


    • PuTTY (the Telnet and SSH client itself)
    • PSCP (an SCP client, i.e. command-line secure file copy)
    • PSFTP (an SFTP client, i.e. general file transfer sessions much like FTP)
    • PuTTYtel (a Telnet-only client)
    • Plink (a command-line interface to the PuTTY back ends)
    • Pageant (an SSH authentication agent for PuTTY, PSCP, PSFTP, and Plink)
    • PuTTYgen (an RSA and DSA key generation utility).
    $ man woman
    Il n'y a pas de page de manuel pour woman.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2013, 11h21
  2. comment créer mot de passe sur bouton ?
    Par xunil2003 dans le forum Langage
    Réponses: 1
    Dernier message: 22/08/2009, 10h22
  3. Réponses: 3
    Dernier message: 20/08/2008, 17h39
  4. modifier le mot de passe utilisateur d'un client dans active directory
    Par passion_info dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 23/11/2006, 00h18
  5. Récupération du mot de passe d'un module VBA dans access
    Par Doctor_M_387 dans le forum Access
    Réponses: 5
    Dernier message: 05/04/2006, 13h46

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