WordPress für Updates über SSH2 konfigurieren

WordPress ermöglicht die Aktualisierung von Plugins, Themes und weiteren Komponenten direkt aus dem Administrationsbereicht. Um die Aktualisierung auf dem Server speichern zu können, benötigt WordPress Schreibzugriff. Hierzu stehen FTP SFTP und SSH2 als Upload Methode zur Verfügung. Dieser Artikel beschreibt wie Sie die SSH2 Variante einrichten.


Vorbereitung

Die Methode SSH2 wird Ihnen nur dann angezeigt, wenn die entsprechende PHP Erweiterung installiert wurde. Ob diese installiert ist, können Sie auf der Kommandzeile mit folgendem Befehl prüfen:

php -r "var_dump(extension_loaded('ssh2'));"

Hierbei sollte der Wert "bool(true)" ausgegeben werden. Ist dies nicht der Fall, müssen Sie die SSH2 Erweiterung zunächst installieren. Mit Yum ist dies per folgendem Befehl möglich:

sudo yum -y install php-pecl-ssh2

Sie können die Extension auch selbst erstellen. Verwendn Sie hierzu folgenden Befehle:

sudo yum -y install gcc automake
sudo pecl install ssh2

Eine Anleitung für PHP7 finden Sie in folgendem Artikel: KB941776 - SSH2 Extension für PHP7 Installieren


Benutzerkonto und SSH-Key Erstellen

Sie benötigen einen Benutzer welcher Schreibrechte in dem Verzeichnis Ihrer WordPress Installation hat. Ertellen Sie zunächst einen neuen Benutzer. In diesem Beispiel nennen wir den Benutzer "wpupdate":

sudo useradd wpupdate

Weiterhin benötigen wir ein SSH-Key, mit welchem sich WordPress verbinden kann. Wählen Sie zunächst einen Ort, an welchem Sie die Schüsseldatei speichern möchten und auf welchen WordPress zugriff hat. In diesem Beispiel liegt unsere WordPress Installation im Verzeichnis /var/www/wordpress, was zugleich das Stammverzeichnis des Webserver ist. Als Speicherort wählen wir /var/www/.ssh, also ein Verzeichnis außerhalb des Stammverzeichnis des Webservers. Dies ist wichtig! Andernfalls könnte man ggf. von außen auf die Schlüsseldatei zugreifen und hierüber zugriff auf Ihren Server erhalten.

Zunächst erstellen wir das Verzeichnis, in welchem wir später den Schlüssel ablegen:

sudo mkdir /var/www/.ssh

Nun erstellen wir ein SSH Schlüsselpaar für den Benutzer "wpupdate":

sudo su wpupdate -c "ssh-keygen -C 'Wordpress Update'"

Bestätigen Sie den vorgeschlagenen Speicherort mit der Eingabetaste.

Häufig berichten Nutzer von Problemen von mit einem passwortgeschützen SSH-Schlüssel im Zusammenhang mit der PHP SSH2 Erweiterung. Wir empfehlen daher in diesem Fall kein Kennwort zu vergeben. Drücken Sie hierzu bei der Abfrage und der Bestätigung einfach die Eingabetaste.

Da sich WordPress später mit dem soeben erstellen Schlüssel und dem Benutzer "wpupdate" anmelden soll, müssen wir zunächst die Verwendung des  öffentlichen Schlüssel hierzu autorisieren. Hierzu kopieren wir den Inhalt des öffentlichen Schlüssel in die Datei .authorized_keys unterhalb des Verzeichnis .ssh des Homverzeichnis. Hier stellen wir jedoch noch from="127.0.0.1" an den Anfang um Anmeldungen mit diesem Schlüssel nur von dem lokalen System aus zuzulassen.

sudo su wpupdate echo -n "from=\"127.0.0.1\" " >> ~/.ssh/authorized_keys
sudo su wpupdate -c "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"

Nun setzten wir noch die Rechte für die .authorized_keys Datei richtig:

sudo su wpupdate -c "chmod og-rwx ~/.ssh/authorized_keys"

Die Datei kann hierauf nur vom Benutzer wpupdate gelesen oder bearbeitet werden.

Jetzt müssen wir den privaten Schlüssel für WordPress zugänglich machen. Dieser liegt aktuell im Homeverzeichnis des Benutzer "wpupdate" unter .ssh/id_rsa, worauf WordPress keinen Zugriff hat. Wir kopieren daher die Datei in das zuvor erstellte Verzeichnis:

sudo cp $( getent passwd "wpupdate" | cut -d: -f6 )/.ssh/id_rsa /var/www/.ssh
sudo cp $( getent passwd "wpupdate" | cut -d: -f6 )/.ssh/id_rsa.pub /var/www/.ssh

Damit WordPress auf die Schlüsseldatei zugreifen kann, müssen wir nun die Zugriffsrechte richtig setzen. Der Benutzer, unter welchem Ihr Webserver läuft muss Leserechte auf die Schlüsseldatei erhalten. Sollten Sie PHP FPM verwenden, kann sich der Benutzer von dem, unter welchem der Webserver läuft, unterscheiden. In diesem Beispiel gehen wir von dem Benutzer "wwwuser" aus.

sudo chown wwwuser:root /var/www/.ssh/id_rsa
sudo chmod 0600 /var/www/.ssh/id_rsa

Zuletzt müssen wir den Benutzer wpupdate noch Schreibrechte auf unsere WordPress Installation einräumen.

setfacl -Rm u:wpupdate:rwx /var/www/wordpress


Testen der SSH Verbindung

Testen Sie den Verbindungsaufbau durch die Eingabe des folgenden Befehls:

ssh -i /var/www/.ssh/id_rsa wpupdate@127.0.01


Zugangsdaten in WordPress hinterlegen

Die Zugangsdaten können Sie nun direkt in der Konfigurationsdatei von WordPress hinterlegen. Diese finden Sie im Stammverzeichnis Ihrer WordPress Installation hat den Namen wp-config-php. Fügen Sie die folgenden Informationen am Ende der Datei hinzu:

if (is_admin()) {
define('FS_METHOD', 'ssh2');
define('FTP_PUBKEY','/var/www/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/var/www/.ssh/id_rsa');
define('FTP_USER','wpupdate');
define('FTP_HOST','127.0.0.1:22');
define('FTP_BASE', '/var/www/wordpress/');
}

Passen Sie ggf. den Pfad zu Ihrer Wordpress Installation an.

Hiermit ist die Konfiguration auch schon abgeschlossen.