SCP dans un script Shell sans utiliser RSA

Résolu
Bonjour,

Je viens vers vous pour un problème auquel je suis confronté depuis hier et que je n'arrive pas a régler.
En effet, j'ai développé un petit script de backup en Shell pour un serveur sous Linux, et j'aurais besoin d'envoyer l'archive ainsi crée sur un NAS distant.

Pour cela j'ai d'abord pensé à utilisé SCP, le problème étant que je ne peux pas utiliser d'authentification RSA car la conf du NAS est remise à zéro tous les jours.
Du coup je me demandais si il existait une autre solution, peut-être en passant le password depuis un fichier ou je ne sais quoi d'autre.

Dans le cas ou mon problème serait insoluble avec SCP, peut-être existe il d'autres solutions, comme monter le NAS sur le serveur avec Samba afin de copier directement mon archive...

En tout cas toute aide est la bienvenue.
Merci d'avance !

6 réponses

  1. Contributeur
    Salut,

    Tu peux utiliser "expect" pour transmettre le login et le password.
    Tu peux utiliser "rsync" aussi si le NAS le permet et si la réinitialisation ne touche pas à la conf....
    Si un serveur FTP est actif sur le NAS, via "lftp" ça doit être jouable.
    1. Merci bien pour ces pistes, la commande expect a l'air de faire ce dont j'ai besoin, mais le man est plutôt fouillis, aurais-tu s'il te plait un exemple d'utilisation avec scp ?

      Merci encore.
    2. Bon bon, après moults tests, je n'arrive pas à faire fonctionner expect, c'est étrange j'ai pourtant bien installé le paquet, mais il ne trouve pas les commandes d'expect

      # sh testExpect.sh
      testExpect.sh: line 4: spawn: command not found
      couldn't read file "Password:\r": no such file or directory
      testExpect.sh: line 6: send: command not found


      Bref si quelqu'un a une idée... Je serais la demain matin =)
      Bonne fin de journée tout le monde.
      1. Contributeur
        On peut voir le contenu de ton script (en masquant bien les choses sensibeules ;-)) )
    3. Voila mon script, il est très basique c'est juste pour tester le fonctionnement d'expect

      #!/usr/bin/expect -f
      
      set force_conservative 1 ;
      set timeout 3
      
      spawn scp /home/backup_global/log.txt root@192.168.69.210:/home/www/testscp/
      expect "Password:\r"
      send -- "[password_server]\r"


      Je ne sais pas ce que font les lignes :
      set force_conservative 1 ;
      set timeout 3

      Du coup j'ai essayé avec ou sans mais aucune différence.
      1. Contributeur
        Vérifie que "Expect" est bien dans "/usr/bin/expect".
        Remplace les retours chariots "\r" par des sauts de ligne "\n".
        Je viens de tester chez moi et y'a pas de soucis...

        $ cat foo.sh
        #!/usr/bin/expect -f
        
        set force_conservative 1 ;
        
        set timeout 2
        spawn scp -P 222 plop root@192.168.10.20:/root/
        expect "password:\n"
        send -- "xxxxxxx\n"
        expect -gl "\\\[*]\$*"
        
        $ ./foo.sh
        spawn scp -P 222 plop root@192.168.10.20:/root/
        root@192.168.10.20's password:
        plop   100%    0     0.0KB/s   00:00
        
        $
    4. Bon OK je viens de voir pourquoi depuis le début rien ne marche, je lançais mon script avec :
      # sh testExpect.sh

      Du coup en utilisant :
      # ./testExpect.sh

      ça marche beaucoup mieux ^^

      Je viens de régler mes derniers petits soucis, ça marche sur la Debian et l'openSUSE.

      Merci beaucoup en tout cas pour ta précieuse aide !
      Je repasserai si d'autre petit problèmes se posent à moi.

      Bonne journée
      1. Contributeur
        Happy for you ;-))

        Bonne journée @ toi aussi.