Forum Linux.général Problem avec cron et ssh

Posté par  .
Étiquettes : aucune
0
23
août
2007
Hello

Depuis un moment, j'ai un problème d'authentication ssh (Public key) avec mon script de backup utilisant rsync, mais le problème ne survient que quand j'utilise crontab pour le lancer. Manuellement il fonctionne bien.

Je lance X avec: ssh-agent startx, puis ssh-add pour mettre la clé.
Il y a les bons droits en execution sur le script.

Quelqu'un aurait une idée pour résoudre ce problème ? Ca fait un moment que je cherche mais je tourne en rond.
  • # Infos supplémentaires

    Posté par  . Évalué à 1.

    Je voulais aussi rajouter que le même script utilisé pour faire le backup localement fonctionne avec crontab.

    Ce n'est que lors de backup distant qu'il plante.

    Peut-être qu'il faut que je fasse passer une variable à crontab ?

    le script utilise #!/bin/sh, et la commande:

    rsync -av -e ssh repertoire root@domaine:/destination

    De root à root, avec juste une clé publique qui fonctionne si je lance le script sans crontab.

    Si vous avez besoin de plus d'infos, je traine par là :)
    Merci
    • [^] # Re: Infos supplémentaires

      Posté par  . Évalué à 1.

      puis ssh-add pour mettre la clé.
      Ben je crois que tu as donné toi-même la réponse à ton problème !..

      Forcément , dans le cron , personne n'a entré ta passphrase, donc aucune authentification par clef ne peux marcher.
      (Pour rappel, ssh-agent ne donne accès à ta clef qu'à ses fils et leur descendance (donc X, ton environnement de bureau, ton shell), pas aux autres (donc, pas cron))

      Maintenant pour régler ça, il te faut sûrement une autre clef, qui ne soit pas protégée par passphrase.
      • [^] # Re: Infos supplémentaires

        Posté par  . Évalué à 1.

        Ah ok :) Merci

        Pourtant ca marchait avant, puis maintenant je recois des messages: Permission denied (Public Key). Depuis une mise à jour serveur il me semble.

        Il n'y a pas un moyen de garder la pass phrase et d'utiliser cron ? ou de lancer crontab comme fils de ssh-agent ?
        • [^] # Re: Infos supplémentaires

          Posté par  . Évalué à 1.

          Je viens de voir (en cherchant "cron public key" dans google-linux ;) ) que la restriction sur les fils de ssh-agent est en fait facilement contournable, si on exporte les bonnes variables d'environnement.
          Il suffirait de fournir à ton script cron, les $SSH_AGENT_PID et $SSH_AUTH_SOCK de ta session, pour qu'il puisse se connecter à l'agent. Par contre je viens d'essayer chez moi ça ne marche pas, peut-être que ça dépend des versions/distribs.
          • [^] # Re: Infos supplémentaires

            Posté par  . Évalué à 1.

            Ok merci :)

            Je pensais qu'il y avait une histoire de variables à mettre, mais pas eu trop le temps de regarder ca.

            J'essayerais d'insérer ces variables d'environnement demain matin. J'utilise une RHEL 4 migré en CentOS 4.5.

            Si ca ne marche pas chez moi non plus, vais bien trouver un moyen de le faire :) Et posterais au cas où je trouve une solution.

            En tout cas, je te remercie pour ton aide.
            • [^] # Re: Infos supplémentaires

              Posté par  . Évalué à 1.

              Regarde du côté de keychain (http://www.gentoo.org/proj/en/keychain/ ) c'est fait exactement pour ça.
              • [^] # Re: Infos supplémentaires

                Posté par  . Évalué à 1.

                Hello

                J'ai réussi, mais je dois encore faire des tests dessus.

                Sur CentOS:

                Dans ~/.bash_profile :
                *********************
                eval `ssh-agent -s`
                ssh-add < /dev/null
                ssh-add ~/.ssh/id_rsa < /dev/null
                echo "SSH_AGENT_PID=$SSH_AGENT_PID" > ~/.ssh-agent
                echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> ~/.ssh-agent
                echo "export SSH_AGENT_PID SSH_AUTH_SOCK" >> ~/.ssh-agent
                *********************

                Dans le script cron:
                *********************
                . ~/.ssh-agent
                *********************

                Je dois regarder car cela me laisse plusieurs "ssh-agent -s" avec des pid différents dans ps -aux. Je pense tuer tuer le PID par ~/.bash_logout.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.