J’ai récemment (re)installé un serveur dédié pour mon ami Guillaume. Ce serveur sert, entre autres, à faire tourner un blog WordPress.

J’ai mis en place un LAMP, tout bête et expliqué à Guillaume comment utiliser SSH – avec SFTP – pour le transfert de fichiers sur le serveur. Ainsi j’évite de mettre un serveur FTP, protocole critiqué pour sa sécurité.

Update Sept 2012 : Depuis la rédaction de ce post il existe un plugin qui fait le boulot en deux clics : http://wordpress.org/extend/plugins/ssh-sftp-updater-support/installation/. Cela ne vous dispense pas de créer vos clés SSH avec ssh-keygen mais tout le reste – y compris les install d’extensions php osnt inutiles ! 

Mais problème, pour mettre à jour les thèmes et les extensions WordPress demande un accès FTP. Le SSH n’est pas disponible par défaut. Je me doutais bien que je n’étais pas le premier à me confronter au sujet, j’ai donc cherché un peu sur la toile et je suis tombé sur des tutos plus ou moins complets, plus ou moins en français. Je vais donc noté tout ça ici et le garder au chaud dans ma base de données, autant pour vous que pour moi !

Alors dans un premier temps on installe, si ce n’est pas déjà fait, les librairies SSH :

sudo apt-get install libssh2-1-dev libssh2-1 libssh2-php

Ensuite les libs PHP5 :

sudo apt-get install php-pear php5-dev

Une fois que tout est installé on va chercher SSH2 via pecl :

sudo pecl install channel://pecl.php.net/ssh2-0.11.3

NB: Ceci est la version beta, pour la version classique un sudo pecl install ssh2 devrait suffire, mais pour Ubuntu 10.04.3 j’ai du utilisé la beta…

Une fois que SSH2 est installé on crée  /etc/php5/conf.d/ssh2.ini avec sudo touch /etc/php5/conf.d/ssh2.ini Et on y place le code suivant :

extension=ssh2.so

On redémarre Apache ( sudo /etc/init.d/apache2 restart) . Voilà pour la config serveur. Reste a configurer WordPress !

On commence par crée des clés SSH pour que WordPress puisse se logger :

ssh-keygen

Vous devriez avoir un truc du genre :

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Created directory ‘/home/user/.ssh’.
Enter passphrase (empty for no passphrase): (le mot de passe n’est pas indispensable, il suffit de taper Entrée)
Enter same passphrase again: (même chose)
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is: blablablab

Une fois les clés SSH crées on copie la clé publique en “authorized_keys” et on modifie les permissions des dossiers :

cd ssh
cp id_rsa.pub authorized_keys
cd
chmod 755 .ssh

Et voilà :) Cela suffit, seul problème avec cette config WordPress va vous demandé à chaque fois vos identifiants, pass, et chemin de clés SSH. Pour y remédier c’est assez simple, il faut éditer le fichier wp-config.php qui se trouve à la racine de votre installation wordpress et d‘ajouter les lignes suivantes :

define('FTP_PUBKEY','/home/user/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/user/.ssh/id_rsa');
define('FTP_USER','user');
define('FTP_PASS','');
define('FTP_HOST','monserveur.com');

Normalement pus besoin de renseigner ces id/pass/keys à chaque fois ! Bye bye le vilain protocole FTP :)