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 :

[PHP] connexion via SSH


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [PHP] connexion via SSH
    Bonjour,

    Je viens à vous car j'ai un petit problème ^^
    Alors voilà j'aimerai lister le contenu d'un dossier présent sur un serveur via une connexion en SSH.

    Le problème c'est que je ne peux pas installer la librairie pour SSH2 qui permet de se connecter au serveur.

    J'ai donc essayer de me connecter (avec exec) au serveur (avec le mot de passe en clair pour le moment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("ssh ".$login.":"$password."@".$station);
    cependant cela ne marche pas, je ne comprend pas pourquoi ?
    si je fais un echo de cette commande, rien ne s'affiche.

    Si je tape cette commande dans un terminal on me demande d'entrer un mot de passe.. pourquoi ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Tu ne peux pas passer le mot de passe de cette manière.

    Je t'invite vivement à consulter la page man de ssh pour connaître les différentes options ainsi la syntaxe correcte de ssh.

    Si tu veux te connecter de manière sécurisée sans avoir a taper de mot de passe, Tu peux implémenter l'authentification par clé mais cela nécessite un certaine configuration sur le serveur.

    http://drpixel.tuxfamily.org/index.p...cation-par-cle

  3. #3
    Futur Membre du Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kiri_le_clown Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("ssh ".$login.":"$password."@".$station);
    cependant cela ne marche pas, je ne comprend pas pourquoi ?
    si je fais un echo de cette commande, rien ne s'affiche.

    Si je tape cette commande dans un terminal on me demande d'entrer un mot de passe.. pourquoi ?
    la commande "ssh login:pass@serveur" n'est pas correcte : ssh ne prend pas le mot de passe en ligne de commande.
    Il faut que tu crée une paire de clé, que tu mettes la clé publique dans <home du user>/.ssh/authorized_keys sur le serveur distant (man ssh-keygen est ton ami).

    ensuite la commande est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -i <fichier de clé privée> <login>@<serveur> ls <répertoire>
    EDIT : trop facile il y a déjà une réponse le temps que je fasse la mienne..

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses
    J'ai donc créer les 2 fichiers nécessaires à l'authentification.
    Je tape donc cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -i /xx/xxx/ssh_key login@station mkdir folder
    avec la console le dossier est bien créé ls
    Si j'execute cette commande dans PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo exec("ssh -i /xx/xxx/ssh_key login@station mkdir folder");
    Le dossier n'est pas créé
    Pareil avec la commande system

    Auparavant j'ai essayé avec ls mais aucun retour avec PHP, je me suis donc demandé si la commande s'exécutée, ce qui n'est visiblement pas le cas

    Pourriez-vous m'éclairer ?


    EDIT :
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (system("ssh -i /xx/xxx/ssh_key login@station mkdir folder"))
            echo "ok";
    else
    	echo "echec";
    j'ai le résultat echec qui s'affiche

    EDIT 2 :
    Alors voilà j'ai pensé à aller voir le fichier log des erreurs
    et voilà ce qui apparait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Could not create directory '/nonexistant/.ssh'.
     
    No protocol specified
     
    (ssh-askpass:12210): Gtk-WARNING **: cannot open display: :0.0
    Host key verification failed.
    Je suis aller dans le fichier /etc/passwd et j'ai donc constater que le nonexistant est pour la personne nobody

    Donc ma question ^^
    Pourquoi y a t il un problème avec nobody ? je ne suis pas censé me connecter avec le login entré dans la commande ssh ? (ce qui se passe lorsque je ne passe pas par PHP)

    La clef a été ajoutée seulement dans /home/login/.ssh/authorized_keys, donc c'est normal que la vérification échoue..

    Comment faire ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Sur quelle distribution est executé ton fichier php? est-ce que ton fichier php est executé via l'apache ou en ligne de commande?

    Peux-tu également fournir le résultat de la commande suivante sur lequel a été executé ton script php?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ps -ef | egrep 'apache|httpd'

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    pour mes tests, je suis sous ubuntu avec xampp/lampp, mon fichier est présent dans htdocs
    et j’accède à ma page PHP via xampp sous firefox.

    Si j’exécute la commande que tu m'a donné dans mon .php
    cela me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nobody 2876 2741 0 13:28 ? 00:00:00 sh -c ps -ef | egrep 'apache|httpd'

    EDIT : j'ai oublié un détail je passe par un proxy, sur le port 8080
    Faut-il configurer quelque chose pour le SSH via PHP ?
    je n'y avais pas pensé étant donnée que la commande marche dans un terminal

    EDIT 2 :
    si je rajoute -v à la commande ssh, dans le log des erreurs j'obtient

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    OpenSSH_5.3p1 Debian-3ubuntu6, OpenSSL 0.9.8k 25 Mar 2009
    debug1: Reading configuration data /etc/ssh/ssh_config
     
    debug1: Applying options for *
     
    debug1: Connecting to <IP>[<IP>] port 22.
     
    debug1: Connection established.
     
    Could not create directory '/nonexistant/.ssh'.
     
    debug1: identity file /<chemin>/ssh_key type 2
     
    debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
     
    debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
     
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3p1 Debian-3ubuntu6
     
    debug1: match: OpenSSH_5.3p1 Debian-3ubuntu6 pat OpenSSH*
     
    debug1: Enabling compatibility mode for protocol 2.0
     
    debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6
     
    debug1: SSH2_MSG_KEXINIT sent
     
    debug1: SSH2_MSG_KEXINIT received
     
    debug1: kex: server->client aes128-ctr hmac-md5 none
     
    debug1: kex: client->server aes128-ctr hmac-md5 none
     
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
     
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
     
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
     
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
     
    debug1: read_passphrase: can't open /dev/tty: No such device or address
     
    debug1: permanently_drop_suid: 65534
     
    No protocol specified
     
    (ssh-askpass:24088): Gtk-WARNING **: cannot open display: :0.0
    Host key verification failed.
    Tout se passe normalement, la connexion a bien lieu, juqu'à la ligne 10 (étant donnée qu'il ne se connecte pas avec le login mais avec nobody)et la vérification de la passphrase (ligne 40), actuellement je n'ai mis aucune passphrase pour justement ne pas avoir à l'entrer par je ne sais quel moyen

  7. #7
    Futur Membre du Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kiri_le_clown Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OpenSSH_5.3p1 Debian-3ubuntu6, OpenSSL 0.9.8k 25 Mar 2009
     
    debug1: read_passphrase: can't open /dev/tty: No such device or address
    Tout se passe normalement, la connexion a bien lieu, juqu'à la ligne 10 (étant donnée qu'il ne se connecte pas avec le login mais avec nobody)et la vérification de la passphrase (ligne 40), actuellement je n'ai mis aucune passphrase pour justement ne pas avoir à l'entrer par je ne sais quel moyen
    Il demande tout de même une passphrase : dans le fichier de clé privé, est-ce que tu as l'entête "Proc-Type: 4,ENCRYPTED" ?

  8. #8
    Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Dans ma clef privée, je n'ai que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -----BEGIN DSA PRIVATE KEY-----
    La Clef
    -----END DSA PRIVATE KEY-----
    Aucune trace de "Proc-Type: 4,ENCRYPTED"

    J'ai généré cette clef avec ssh-agent (sous ubuntu)


    EDIT :


    Ça y est, j'ai trouvé...
    Il y avait une erreur dans le fichier "httpd.conf", l'utilisateur ne pouvait exécuter la commande SSH, j'ai donc modifié cet utilisateur tout marche, plus d'erreur

    Merci pour votre aide / patience

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancement script php via ssh
    Par furtif1 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 25/04/2007, 16h03
  2. connexion via perl et php
    Par stross dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/07/2006, 18h24
  3. [Directives] changer php ini via ssh
    Par SolidSneak dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/06/2006, 08h19
  4. [LDAP] Connexion via PHP à un annuaire LDAP sous un serveur Novell
    Par podz dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 15/06/2006, 14h34
  5. connexion via asp ou php ?
    Par cege dans le forum 4D
    Réponses: 5
    Dernier message: 25/01/2006, 08h43

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