Día: 5 de abril de 2012

  • Actualizar WordPress por SSH

    Si administras un servidor dedicado o propio y conoces un poco de seguridad, quizá ni te hayas planteado la posibilidad de instalar un servidor FTP, sino que utilizas SFTP (Filezilla, Transmit y muchos otros clientes lo soportan) para subir tus archivos.

    Aunque parezca que WordPress sólo detecta FTP y FTPS, deberás instalar el paquete que habilita SSH2 sobre PHP de forma sencilla (elige el que te permita tu distribución):

    apt-get install libssh2-php

    pecl install ssh2 channel://pecl.php.net/ssh2-version

    yum install gcc php-devel php-pear libssh2 libssh2-devel

    Ahora bien, por defecto se añade la línea correspondiente al fichero de configuración de PHP para que automáticamente se cargue cuando reiniciamos Apache, pero es posible que no se haga, debemos comprobar que existe:

    Ubuntu/Debian
    cd /etc/php5/conf.d;
    vi ssh2.ini

    Si no existe la linea, añadiremos

    echo “extension=ssh2.so” > ssh2.ini

    Y reiniciamos Apache

    /etc/init.d/apache2 restart

    En Red Hat, CentOS, Fedora lo mismo:

    cd /etc/php.d;
    echo “extension=ssh2.so” > ssh2.ini
    /etc/init.d/httpd restart

    Ahora sólo nos falta generar una clave privada y pública:

    ssh-keygen

    Autorizamos a sí mismo:


    cd .ssh
    cp id_rsa.pub authorized_keys

    Y damos permisos de lectura. Aquí una cuestión importante ya que dar permisos de lectura es bastante peligroso (ya no digamos de escritura) si no se tienen las últimas versiones instaladas, puesto que es un agujero de seguridad bastante utilizado por los hackers.


    cd ~/
    chmod 755 .ssh
    chmod 644 .ssh/*

    En WordPress ya nos aparecerá la opción SSH2 a la hora de actualizar. Si queremos que esos valores aparezcan por defecto debemos editar el archivo wp-config.php y añadir las siguientes líneas adaptándolas a la configuración correspondiente:

    define('FTP_PUBKEY','/home/user1/.ssh/id_rsa.pub');
    define('FTP_PRIKEY','/home/user1/.ssh/id_rsa');
    define('FTP_USER','user1');
    define('FTP_PASS','');
    define('FTP_HOST','server1.example.com:22');