10 novembre 2016

Gulp-ssh

Installation de gulp-ssh

Paramétrage de gulp-ssh avec une clef ssh qui contient un passphrase.
Je travaille sous windows mais pour mes développements web j’utilise un serveur linux. J’utilise donc une virtualbox sur laquelle j’ai installé un serveur debian Jessie.
Forcément j’ai paramétré un accès ssh. Ce qui implique d’installer les clefs privées et publiques pour les accès sécurisés pour les utilisateurs autorisés.
Le couple clef privée/publique peut être protégé par un passphrase. Et c’est là où cela se complique. Car on ne veut pas mettre en clair cette phrase de sécurité dans un fichier de configuration. Donc pour une connection avec gulp-ssh il faut utiliser la configuration suivante :

'use strict'

var fs = require('fs');
var gulp = require('gulp')
var GulpSSH = require('gulp-ssh')
var SiteRootPath = '/var/www/actacenter/' //Chemin du site

//et la configuration
var config = {
  host: '192.168.0.100', //adresse et port de la virtual box
  port: 22,
  username: 'courudavance', //nom d'utilisateur.
  agent: 'I:/Temp/.ssh-socket',
  agentForward: true
}

var gulpSSH = new GulpSSH({
  ignoreErrors: false,
  sshConfig: config
})
//On teste l'envoi de commandes sur le serveur distant
gulp.task('exec', function () {
  return gulpSSH
    .exec(['uptime', 'ls -a', 'pwd'], {filePath: 'commands.log'})
    .pipe(gulp.dest('logs'))
})


Contrairement aux indications données dans l’aide sur gulp-ssh, il ne faut pas mettre le paramètre “privateKey:” pour le cas qui nous pré-occupe. (utile seulement pour les clefs sans protection par passphrase).
Cette configuration utilise plutôt ssh-agent (sur windows le processus ssh-agent est activé par ssh-agent.exe’) Le but est donc d’activer ssh-agent. Pour cela le plus simple, si vous avez installé git est d’utiliser une console git bash. (Windows, démarrer/rechercher des programmes et fichiers et taper git bash). On peut aussi utiliser une console Cygwin si vous l’avez installé. Cela va nous ouvrir une console bash et nous demander le passphrase pour le stocker ensuite avec ssh-agent.
On tape echo “$SSH_AUTH_SOCK” pour obtenir le chemin du socket. Ce qui me renvoie ici /tmp/.ssh-socket (si la commande ne renvoie rien c’est que le ssh agent n’est pas actif.).
Il m’a fallu également trouver le chemin absolu du dossier tmp. Il est stocké dans la variable d’environnement %tmp%. echo %tmp% me renvoie donc I:/Temp. Il ne nous reste qu’à compléter le paramètre agent dans la configuration ci-dessus.

Pour en savoir plus sur la configuration de gulp-ssh voir les paramétres de connection ssh