rss

PHP : sFTP et timeout pour une connexion SSL

En PHP, je cherchais comment mettre en œuvre un timeout plus court pour une connexion ou des commandes sFTP (secure FTP).

Sur une connexion FTP sans chiffrement, l'option est prévue :

ftp_connect($host, $port, $timeout);

Mais si l'on utilise ssh2 par exemple, on ne retrouve pas l'option "timeout" (du moins je n'ai pas trouvé!)

Au passage, on peut très vite se perdre dans des options de stream inexistantes :)
J'avais tenté un code dans le genre suivant mais sans succès :

$streamDir = 'ssh2.sftp://'.$stream.$remoteDir;
$stream_options = array('ssh2' => array('timeout' => 1));
$stream_context = stream_context_create($stream_options);
$handle = opendir($streamDir, $stream_context);


Du coup j'ai opté pour un test d'ouverture de port préalable à la connexion.
Pour cela, je n'utilise pas un ping fait maison (car le test serait incorrect suivant les conf. de firewall)
mais une ouverture de socket directement avec un timeout réduit.

voici la fonction préalable à une connexion sFtp que j'utilise :

/**
* test l'ouverture d'un port sur une hôte distant
*
private function __testHostPort() {
$timeoutsec = 2;
$fp = @fsockopen($this->_host, $this->_port, $errno, $errstr, $timeoutsec);
if (!$fp) {
throw new Ftp_Exception("$errstr ($errno)");
} else {
@fclose($fp);
}
}

Elle est appelée préalablement à la connexion SSH et lève une exception si le serveur n'a pas le port ouvert avant toute connexion SSH.

protected function _connect() {
if (!$this->isConnected()) {
$this->_logger->debug("_connect :" . $this->__tostring());
$this->__testHostPort();
$connexion = @ssh2_connect($this->_host, $this->_port);
(...)

PS : si vous avez mieux, je suis preneur... j'utilise le module php "openssh".

Aucun commentaire:

Enregistrer un commentaire

Mots clés du blog

10.1 4G acceptancetest adb androï Android androïd Android7 api appender appengine application applications archive array assistantematernelle astuce auth0 authentication authority automation Axis bash bearer blog boot bootloader bower build bundle c calendrier camille combal cdi certificate cf client cloudfoundry collaboratif command commandes connexion console css cyanogen decrypt démasquées démasquer développement dll dump easter eggs écologie écrit employeur EMUI EMUI5.0 encrypt enfant évènement export-package ExtJS fab fastboot fiche find firefox gadget galaxytab gelf gem git gmail gnupg gooelappengine google gparted gpg gpg2 gps graylog grenoble Grid gui harddrive heroku hover howto HTML http https IE ihm immobilier imprimante innovation insolite instance integration Java JavaScript jenkins jeu jobs json json-schema-validator key keystore labs linux livre log log4j logger logs lombok masquées masquer maven maven-gae-plugin Mémoire microsoft mobile mockito mondialisation monitor MUSE musique en ligne myopera nodejs npm NT NTEventLogger onglet openstack osgi paas package parameters parent php politique prosyst prototype proxies proxy quartz radio rappel recherche regex repository resize RIA ridge rock ROM route ruby rubygems s8500 samsung scheduler scm secret secure sel selenium Serializer server shared shell sign signature slf4j smartphone so société song spy ssh ssl struct swagger swig tâches téléphone téléréalité test thunderbird timeout token Tomcat tooltip tooltips truststore TWRP ubuntu unit test validator verify virgin virtualbox wave waze web WebApp wiki wikimedia wikipédia wikipen wiko windows windows10 yahoo youtube yum