Hébergements Web - Connexion SFTP sur serveur distant
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Connexion SFTP sur serveur distant

Von
GuilhemP
Erstellungsdatum 2018-02-01 10:34:03 (edited on 2024-09-04 11:21:31) in Hébergements Web

Bonjour,

j'ai un hébergement pro, je suis en train de développer un outil qui va aller se connecter sur un serveur distant en SFTP pour récupérer des archives et les copier dans un dossier.

J'essaye d'utiliser la librairie phpseclib pour parvenir à mes fins mais je rencontre des difficultés n'étant pas familier avec ces protocoles.

Je ne sais pas comment gérer ces histoires de clés publiques/privées et il m'est impossible de me connecter au serveur distant.

J'utilise un script de la forme

include('lib/phpseclib/Net/SSH2.php');
include('lib/phpseclib/Crypt/RSA.php');
include('lib/phpseclib/Math/BigInteger.php');

$key = new Crypt_RSA();
// Le password qui m'a été fourni par le client.
$key->setPassword($ftp["jc"]["pwd"]);
$key->loadKey(file_get_contents(je_ne_sais_pas_quoi_mettre_la'));

$ssh = new Net_SSH2($ftp["serveur"]);
if (!$ssh->login($ftp["jc"]["login"], $key)) {
exit('Login Failed');
}

J'obtiens toujours la même réponse : Login Failed.

Je suis un peu perdu là, j'avoue...


26 Antworten ( Latest reply on 2018-08-21 10:52:24 Von
BenoitC1
)

Si tu te connectes avec un mot de passe, il ne doit pas y avoir de clé publique / privée qui sont généralement utilisées quand justement il n'y a pas de MDP.

Merci Buddy pour ta réponse,

en essayant de n'utiliser que la ligne

`$key->setPassword($ftp["jc"]["pwd"]);`

je n'arrive toujours pas à me connecter.

J'ai cru qu'il fallait une clé publique/privée car lorsque je me connecte au serveur avec Filezilla (avec les logins et mdp fournis) j'ai quand même un message à propos d'une clé.

Cela dit, je n'arrive toujours pas à me connecter avec phpseclib avec les login/pass qui fonctionnent sur filezilla. Impossible de faire fonctionner ce code d'exemple que je retrouve partout à propos de cette librairie.

Je suis pourtant certain qu'il y a un moyen de se connecter à ce serveur via un script php, mais c'est finalement beaucoup plus compliqué que je ne le pensais de prime abord...

Bonjour,

Déjà est-ce que vous arrivez à vous connecter avec un client SFTP et ce sans problème ?

Si oui avez-vous essayé votre code en local pour debug ?

Cordialement, janus57

Bonsoir Janus et merci pour votre réponse,

je me connecte sans souci avec filezilla par exemple. Les choses se corsent lorsque j'essaye de passer en putty. Au moment de valider le mot de passe lors de la connexion la fenêtre du terminal se ferme.

Je suis toujours bloqué avec ce problème même après avoir contacté les responsables des serveurs auxquels j'essaye d'accéder.

Il y a un truc de base qui m'échappe car sur stackoverflow je ne trouve personne qui a rencontré le même problème que moi, ce qui est statistiquement assez peur probable.

Cordialement,

Bonjour,


je me connecte sans souci avec filezilla par exemple. Les choses se corsent lorsque j'essaye de passer en putty. Au moment de valider le mot de passe lors de la connexion la fenêtre du terminal se ferme.

si c'est un serveur qui fait que du SFTP, c'est tout à fait normale, putty n'est pas un client SFTP, c'est un client SSH.

Vous avez essayé en local comme demandé ?

Cordialement, janus57

Bonjour,

par "essayer en local" vous voulez dire installer un apache sur mon ordi et tenter la connexion en direct ?

Bonjour,

Mais lorsque tu te connectes via Filezilla c'est en FTP ou SFTP ? car ce n'est pas du tout la même chose.

Cdlt.

Bonjour Boris,

lorsque je me connecte depuis filezilla c'est en sftp.

Bonjour,
je viens de faire les manips suivantes, je ne suis pas certain que ça puisse vous aider mais je vais les lister quand même :

je viens de me connecter en putty sur le serveur surlequel j'ai mon code source.

L'ip de ce serveur est censé être : 213.186.33.208 (mon serveur ovh)

Une fois que je suis connecté sur le serveur je lance une commande :

`sftp mon_user@mon_serveur_cible`

et J'obtiens :

ssh: connect to host mindsftp1.odiso.net port 22: Connection refused
Couldn't read packet: Connection reset by peer

Est-ce que cette manip a un sens et est-ce qu'elle donne est informations supplémentaires ou est-ce que je dois la faire autrement ?

J'ai fait l'installation par composer de phpseclib :

composer require phpseclib/phpseclib

Et ensuite le script de test :

require('vendor/autoload.php');
use phpseclib\Net\SFTP;

$sftp = new SFTP('server.tld', '22');
if (!$sftp->login('username', 'password')) {
exit('Login Failed');
}
else{
echo "connection success";
$sftp->mkdir('dossier_test');
}
?>

En espétant que cela pourra t'aider

Cdlt.


ssh: connect to host mindsftp1.odiso.net port 22: Connection refused
Couldn't read packet: Connection reset by peer


C'est bien sur le port 22 ?

EDIT : apparemment oui c'est bien le port 22

Boris,

j'ai voulu faire la même manip, mais mon soucis c'est que nous tournons avec un PHP 5.5 sur notre hébergement principal. J'ai besoin d'être en 5.6 pour installer composer (qui n'est pas installé) et faire les mêmes essais.

Nous avons beaucoup de sites hébergés sur ce serveur et j'ai peur en upagradant à la 5.6 que certaines choses ne fonctionnent plus.

Suis un peu bloqué là....

Je ne pense pas qu'il y ait de grosses différences entre php 5.5 et 5.6

j'ai testé mon script avec l'adresse présente dans le message d'erreur et ça semble aller (bien que l'IP de mon serveur est maintenant bloqué sur ton parefeu ^^ car j'ai mis plusieurs fois des mot de passe éronné :p)

EDIT: mais tu n'es pas obligé de passer par composer, il suffit d'adapter ton script pour qu'il se serve de la class SFTP plutôt que SSH2.
Cdlt.

Bonjour,

Quand je parle de local je parle de tester sur sa propre machine avec XAMPP.

Mais il faut savoir que si vous avez fait plusieurs tentatives depuis le mutu OVH l'IP à peut être été bloqué.

Cordialement, janus57

Merci Boris pour ta réponse et tes démarches,

j'ai fait plusieurs essais en tous genres, voici le dernier en date :

include('./lib/phpseclib/Net/SFTP.php');
include('./lib/phpseclib/Crypt/RSA.php');
include('./lib/phpseclib/Math/BigInteger.php');

$sftp = new Net_SFTP(mon_serveur);
if (!$sftp->login($ftp["jc"]["login"], $ftp["jc"]["pwd"])) {
var_dump($sftp->getLog());
var_dump($sftp->getErrors());
exit('Login Failed');
}

J'obtiens invariablement le même résultat :

bool(false)
array(0) { }
Login Failed

C'est fou, pourtant se connecter en sftp via php ne devrait pas être si compliqué que ça, je suis certain que je passe à côté de quelque chose de super évident. C'est la première fois que je suis confronté à cette problématique et il y a quelque chose qui m'échappe...

En tous cas, encore une fois, un grand merci de ne pas me laisser seul face à ce casse-tête...

Bonjour,

Si vous utilisez la v2 il manque des "use" dans votre code.

Cordialement, janus57

J'utilise la 1.0.9

Ma seule solution serait d'oublier phpseclib et d'essayer avec la librairie native de PHP : SSH2 PECL extension

Quelqu'un sait comment je pourrais faire pour l'installer sur mon PHP (mutualisé pro) ?

Bonjour,

Impossible d'installer une extension PHP en mutu.

Avez-vous essayé avec la v2 de la librairie?

Cordialement, janus57

Janus, merci pour vos réponses,

je ne suis vraiment pas familier avec le SSH et la crypto en général, donc il se peut que je pose des questions stupides :

- Sur notre mutualisé nous avons un certificat SSL.
- Sur le FTP correspondant, le SSH n'est pas activé, mais je me dis que ça ne doit pas jouer car c'est un serveur SFTP distant auquel j'essaye d'accéder et notre serveur FTP n'est pas concerné, mais je peux me tromper. Seulement je ne vois pas le rapport.

J'ai essayé tous les exemples d'implémentation de phpseclib que j'ai pu trouver sur le net ces dernières 48H, je ne pense pas que le code soit en cause car il est très simple. Donc à priori passer en V2 ne devrait pas changer quoi que ce soit, cela dit, pour les bonnes mesures, je vais quand même tenter, on ne sait jamais...

Il doit y avoir un truc qui bloque sur le serveur distant auquel j'essaye d'accéder.

Mais si ça continue je vais devoir abandonner car je perds trop de temps. C'est terriblement frustrant de se retrouver bloqué par quelque chose d'aussi simple que ça....

Bonjour,

Le ssl/tps pour faire du HTTPS l'influence en aucun cas SSH/SFTP.

Idem FTP et SFTP c'est deux choses bien différentes.

La v2 étant une amélioration de la v1 je conseillerais très fortement d'utiliser la v2.

Cordialement, janus57

Janus,
je viens de regarder pour la V2, mais visiblement il faut utiliser composer et je n'ai jamais fait ça, je ne sais pas du tout comment m'y prendre...

Je dois faire passer mon mutualisé en 5.6 (au lieu de la 5.5 courante) et j'ai peur que tous les sites que nous avons dessus plantent... Si c'est le cas est-ce que peux downgrader pour revenir à 5.5 ?

Bonjour,

C'est pas obligatoire, normalement on peu l'utiliser sans composer si on fait les include manuellement.

Cordialement, janus57

Janus,
je viens de faire le test avec le code suivant (qui ne me renvoi plus d'erreur de syntaxe) :

include('./lib/phpseclib/Net/SSH2.php');
include('./lib/phpseclib/Net/SFTP.php');
include('./lib/phpseclib/Crypt/RSA.php');
include('./lib/phpseclib/Math/BigInteger.php');

$sftp = new \phpseclib\Net\SFTP($ftp["serveur"]);
if (!$sftp->login($ftp["jc"]["login"], $ftp["jc"]["pwd"])) {
var_dump($sftp->getLog());
echo("
");
var_dump($sftp->getErrors());
echo("
");
echo('Login Failed
');
}

Toujours le même résultat :

bool(false)
array(0) { }
Login Failed

Bonjour,

je suis repassé sur la version 1.0.9 de phpseclib.

J'ai essayé de me connecter sur un serveur sftp de test que j'ai trouvé sur le net :

test.rebex.net
login : demo
pwd : password

J'ai utilisé le code suivant :

include("lib/phpseclib/Net/SSH2.php");
include("lib/phpseclib/Crypt/RSA.php");

$ssh = new Net_SSH2("test.rebex.net", 22);
if (!$ssh->login("demo", "password")) {
exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');

Et toujours pas de connexion, donc là je sèche et ne vois pas du tout d'où peut bien venir le problème.

J'ai vérifié et le firewall n'est pas activé sur le sous-domaine depuis lequel j'essaye ces connexions SFTP.

Bonjour,
avez vous réussi à régler votre problème ?