[SSH] Ecrire un script pour connexion SSH

Linux_fedora Messages postés 10 Date d'inscription   Statut Membre -  
 kikou -
Salut a tous!

Je voudrais ecrire un script qui me permettrai depuis linux de

lancer une connexion ssh sur le PC Windows
Executer une commande (Exemple : Dir)
Crer un fichier de resultat (dir > test.txt)
Recuperer ce fichier

Sachant que j'ai SSH et que je me connecte parfaitement bien sur le PC windows via mot de passe.

Voila, pouvez me dire si c'est realisable et comment?

Merci de votre aide.

10 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Voilà un script qui marche bien chez moi dans les mêmes conditions que les tiennes, à savoir un client Linux (OpenSSH_4.3p1) qui se connecte au serveur Windows 2000 (OpenSSH_3.8.1p1) .

    Le script :
    #!/usr/bin/expect -f
    
    set force_conservative 1;
    
    set timeout 3
    spawn ssh 192.168.10.1
    expect "password:\r"
    send -- "xxxxxxx\r"
    expect "C:\Program Files\OpenSSH\home\jp>"
    send -- "dir > fichier.txt\r"
    expect "C:\Program Files\OpenSSH\home\jp>"
    send -- "dir\r"
    expect "C:\Program Files\OpenSSH\home\jp>"
    send_user "Bye-bye\n"
    
    puts "\n"
    exit
    Le résultat en direct live ;-))
    [jp@MDK tmpfs]$ ./script.sh
    spawn ssh 192.168.10.1
    
                                ****USAGE WARNING****
    
    [...]
    blablabla
    [...]
    
    
    jp@192.168.10.1's password:
    Last login: Thu Aug 17 18:05:09 2006 from mdk.localdomain
    Microsoft Windows 2000 [Version 5.00.2195]
    (C) Copyright 1985-2000 Microsoft Corp.
    
    C:\Program Files\OpenSSH\home\jp>dir > fichier.txt
    
    C:\Program Files\OpenSSH\home\jp>dir
     Le volume dans le lecteur C s'appelle WK2Pro
     Le numro de srie du volume est 5878-57AE
    
     Rpertoire de C:\Program Files\OpenSSH\home\jp
    
    17/08/2006  18:06       <DIR>          .
    17/08/2006  18:06       <DIR>          ..
    17/08/2006  18:06                  434 fichier.txt
    17/08/2006  13:23       <DIR>          ssh
                   1 fichier(s)              434 octets
                   3 Rp(s)     465ÿ195ÿ008 octets libres
    
    C:\Program Files\OpenSSH\home\jp>Bye-bye
    
    
    [jp@MDK tmpfs]$
    Ca marche ;-))
    4
  2. Linux_fedora Messages postés 10 Date d'inscription   Statut Membre 4
     
    J'ai trouve une solution en utilisant le pipe

    J'ai fait un script ssh1:

    #!/usr/bin/expect -f
    send_user "dir > file.txt\n"

    Et si je lance manuellement dans le terminal:

    /home/ssh1 | ssh user@xxx.xxx.x.x

    Cele execute bien la commande dir > file.txt et le fichier est cree contenent bien les resultat de dir!

    Le probleme est que si j'integre ca dans le script global pour que ce soit automatique:

    #!/usr/bin/expect -f
    set timeout 60
    spawn /home/ssh1 | user@xxx.xxx.x.x
    expect "password: $"
    send "xxxxx\n"
    interact
    spawn sftp user@xxx.xxx.x.x:file.txt
    expect "password: $"
    send "xxxxxx\n"
    interact

    Il accepte pas la commande
    spawn /home/ssh1 | user@xxx.xxx.x.x

    Que faire ??
    3
  3. Linux_fedora Messages postés 10 Date d'inscription   Statut Membre 4
     
    Exact ca marche!!

    Tout est dans la force_conservative

    Merci!
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Tout est dans la force_conservative

      Exact petit scarabée.
      Que la conservation soit avec toi alors ;-)))))
      0
  4. kikou
     
    bjr bsr a vous :)

    j'aimerai savoir comment faire pour cacher l'affichage de l'exécution du scripte
    ex:
    [...]
    ssh root@domain.com   #comment cacher ca 

    [...]

    Merci a vous
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jisisv Messages postés 3678 Statut Modérateur 936
     
    Après avoir initialisé les variables monport et monserveur:
    johan@johan:~$ ssh -l johand -p $monport $monserveur ls /mnt/hda4/johand/ISOS > file.txt
    Password:
    johan@johan:~$ cat file.txt
    dfs-0.99.0_i386.iso
    dfs-0.99.0_i386.iso.md5
    dsl-3.0.iso
    IDE-3.1.2a.iso.bz2
    pcbsd
    reactos0.3.0-RC1-live.zip
    ReactOS-LiveCD.iso
    ubuntu
    

    La redirection est effectuée sur le client
    johan@johan:~$ ssh -l johand -p $monport $monserveur 'ls /mnt/hda4/johand/ISOS > file.txt'
    Password:
    johan@johan:~$ ssh -l johand -p $monport $monserveur 'cat file.txt'
    Password:
    dfs-0.99.0_i386.iso
    dfs-0.99.0_i386.iso.md5
    dsl-3.0.iso
    IDE-3.1.2a.iso.bz2
    pcbsd
    reactos0.3.0-RC1-live.zip
    ReactOS-LiveCD.iso
    ubuntu
    

    La redirection est effectuée sur le serveur distant.
    On peut évidemment effectuer une suite de commandes ne demanadant pas d'interractivité:
    johan@johan:~$ ssh -l johand -p $monport $monserveur "echo \"N'importe quoi\" > file.txt; cat file.txt; pwd"
    Password:
    N'importe quoi
    /home/johand
    johan@johan:~$ scp -P $monport johand@$monserveur:file.txt .
    Password:
    file.txt                                                                                   100%   15     0.0KB/s   00:00
    

    Il faut trouver une solution pour l'envoi du mot de passe...
    (il y avait expect dans le temps)
    Johan
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut Johan,

      il y avait expect dans le temps
      il existe toujours, d'ailleurs il me sert tous les jours pour éteindre ma passerelle ...
      #!/usr/bin/expect -f
      
      set force_conservative 1 ;
      
      set timeout 2
      spawn ssh -l root 192.168.10.20 -p 222
      expect "password:\r"
      send -- "mon_mot_de_passe\r"
      expect -gl "\\\[*]\$*"
      send_user  "\rExtinction imminente..."
      send -- "shutdown -h now\r"
      expect -gl "\\\[*]\$*"
      ;-))
      0
      1. jisisv Messages postés 3678 Statut Modérateur 936 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Ah ben oui, c'est parfait.
        Celà fait quelques années que je ne l'ai plus utilisé ;)
        Johan
        0
  7. Linux_fedora Messages postés 10 Date d'inscription   Statut Membre 4
     
    A priori c'est possible donc.

    Mais je vois pas comment prendre en compte la commande expect.

    Pourriez vous m'ecrire le script avec cette commande pour le password et pour l'exemple que j'ai mis plus haut?

    Ce que je voudrai c'est juste a avoir a lancer le script par la suite.

    Merci encore pour l'aide!
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Regarde dans le "man" d'expect et surtout la fonction "autoexpect" (man autoexpect), qui génère un fichier d'après toutes les commandes tapées en mode interactif.

    Je te file ce que j'ai comme liens là-dessus :
    http://modp.com/release/sshpasswords/
    http://www.linuxlots.com/~barreiro/spain/expect/
    http://www.oreilly.com/catalog/expect/chapter/ch03.html
    http://www.cotse.com/dlf/man/expect/index.htm

    ;-))
    0
  9. Linux_fedora
     
    Salut

    C'est ok pour la commande expect.

    Mais dans :
    johan@johan:~$ ssh -l johand -p $monport $monserveur "echo \"N'importe quoi\" > file.txt; cat file.txt; pwd"

    Avec la commande dir cela ferait bien :

    johan@johan:~$ ssh -l johand -p $monport $monserveur "echo \"dir\" > file.txt; cat file.txt; pwd"

    Seulement cela ne marche pas (ca cre un fichier avec le mot dir dedans), est ce qu'il faur activer echo 1 pour ce genre de commande ou pas?
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      C'est normal
      johan@johan:~$ echo \"dir\" > file.txt; cat file.txt
      "dir"


      Ton serveur distant est un Unix , je suppose, donc
      ssh -l username  $monserveur "ls > file.txt; cat file.txt"

      - va créer file.txt
      -afficher le contenu sur la console la console locale en l'occurrence car il n'y a aucune redirection ni distante ni locale
      Tu peux utiliser tee
      ssh -l username  $monserveur "ls | tee file.txt"

      (man tee)
      Si tu pouvais préciser ton objectif...
      Johan
      0
  10. Linux_fedora Messages postés 10 Date d'inscription   Statut Membre 4
     
    Desole je vais essayer de mieux expliquer

    Je suis sur un client linux fedora et je veux executer ce script vers un serveur distant WINDOWS XP.

    Je veux que le script:
    - se connecte sur le serveur distant Win XP
    - execute la commance DIR
    - Cre un fichier de resultat
    _ importe le fichier de resultat chez le linux

    Voila pour l'instant mon script (grace a votre aide)

    #!/usr/bin/expect -f
    set timeout 60
    spawn ssh user@xxx.xxx.x.x "echo \dir > file.txt"
    expect "password: $"
    send "xxxxxxxx\n"
    interact
    spawn sftp user@xxx.xxx.x.x:file.txt
    expect "password: $"
    send "xxxxxxx\n"
    interact

    Il me fait tres bien tout sauf executer une vraie commande DIR avamt de creer le fichier de resultat

    Le fichier creer contient le mot "dir"!!

    Voila j'espere que c'est plus clair
    0
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Un
      spawn ssh user@xxx.xxx.x.x "dir > file.txt"
      devrait suffire alors.
      Tu disposes d'un serveur ssh su ta bécanne XP?
      Cygwin, autre ?
      0
  11. Linux_fedora Messages postés 10 Date d'inscription   Statut Membre 4
     
    Oui il y a Opensshd dessus.

    Si je fait
    spawn ssh user@xxx.xxx.x.x "dir > file.txt"

    Il me fait un message d'erreur
    dir not found

    Alors que cette commande marche tres bien si je la fais apres une connexion manuelle!

    Tu vois une solution?
    0