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...
Hébergements Web - Connexion SFTP sur serveur distant
Related questions
- Connexion à mon compte client
151861
13.02.2019 09:51
- Serveur non sécurisé, celui-ci ne supporte pas FTP sur TLS
125731
03.09.2018 14:46
- reCAPTCHA erreur pour le propriétaire du site : clé de site non valide
110110
14.02.2019 16:17
- [FAQ] Comment mettre à jour mon site pour supporter Apache 2.4 ?
97510
28.07.2017 11:39
- Passage en php 7.4
96560
30.06.2020 05:05
- Augmenter taille PHP Post Max Size sur mutualisé ?
90836
04.12.2019 21:52
- The requested URL / was not found on this server
90067
02.03.2017 18:25
- Deploy d'un projet Node JS
89974
12.10.2016 20:18
- NextCloud sur mutualisé
89957
07.04.2017 08:42
- Ce site est inaccessible Impossible de trouver l'adresse DNS du serveur
89700
16.10.2016 16:24
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,
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.
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 ?