4 votes

Wordpress ne trouve pas la paire de clés publique et privée ssh

La configuration de mon serveur est la suivante : CentOS 5.8 (final) exécutant Nginx.

J'utilise la fonction SSH2 de l'installateur de plugins de Wordpress.

J'ai installé lib2ssh et cela fonctionne (Wordpress reconnaît son existence).

L'utilisateur (appelé playwithbits ) que j'ai fourni à wordpress est chrooté et a le répertoire personnel de /home/nginx/domains/playwithbits/

Les clés publiques et privées sont situées dans le répertoire /home/nginx/domains/playwithbits/keys/ et sont nommés id_rsa.pub y id_rsa respectivement.

J'ai copié le contenu de id_rsa.pub vers le fichier authorized_keys situé à /home/nginx/domains/playwithbits/.ssh/

Je n'ai pas défini de mot de passe pour les fichiers clés. Cependant, Wordpress continue de renvoyer l'erreur :

Clés publiques et privées incorrectes pour playwithbits

J'ai fourni les informations suivantes à Wordpress

Hostname: localhost
Username: playwithbits
Password: Blank
Public key: /keys/id_rsa.pub //I have also tried the paths from server root
Private key: /keys/id_rsa

Voici les permissions que j'ai définies sur les dossiers et fichiers concernés :

drwx------ 2 playwithbits playwithbits 4096 Jun  8 11:25 .ssh
drwx------ 2 playwithbits playwithbits 4096 Jun  8 13:27 keys
-rw------- 1 playwithbits playwithbits  414 Jun  8 11:21 authorized_keys
-rw------- 1 playwithbits playwithbits 1.7K Jun  6 02:17 id_rsa
-rw-r--r-- 1 playwithbits playwithbits  414 Jun  6 02:17 id_rsa.pub

J'ai également essayé de me connecter en mode débogage, mais j'ai obtenu le résultat suivant :

Connection from 127.0.0.1 port 56674
debug1: Client protocol version 2.0; client software version libssh2_0.18 PHP
debug1: no match: libssh2_0.18 PHP
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.8
debug1: permanently_set_uid: 74/74
debug1: list_hostkey_types: ssh-rsa,ssh-dss
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: client->server aes256-cbc hmac-sha1 none
debug1: kex: server->client aes256-cbc hmac-sha1 none
debug1: expecting SSH2_MSG_KEXDH_INIT
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: KEX done
Received disconnect from 127.0.0.1: 11: PECL/ssh2 (http://pecl.php.net/packages/ssh2)
debug1: do_cleanup
debug1: do_cleanup

Quelqu'un sait-il pourquoi je ne peux pas utiliser la clé publique et la clé privée pour accéder ? Si j'utilise le mot de passe du compte à la place, wordpress est capable de se connecter et d'effectuer des mises à jour.

Edit : Dans mon sshd_config J'ai les règles suivantes :

Match group web-root-locked
         ChrootDirectory /home/nginx/domains/%u
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp
         AuthorizedKeysFile /home/nginx/domains/%u/.ssh/authorized_keys

playwithbits est un membre de web-root-locked

4voto

fvu Points 21471

J'ai trouvé la réponse à cette question grâce à quelques essais et erreurs. Les clés devaient appartenir au serveur web et non à l'utilisateur avec lequel j'essaie de me connecter.

chown nginx:nginx id_rsa
chown nginx:nginx id_rsa.pub

Maintenant, il fonctionne comme un rêve.

3voto

Tom Points 720

Mon premier instinct : id_rsa devrait être dans ~/.ssh/

Apache peut générer toutes sortes de processus via fork, enfants, enfants de ceux-ci, etc. Pour cela, je découvrirais quel chemin Wordpress pense essayer d'ouvrir en utilisant des outils de journalisation d'audit.

`auditctl -a entry,always -F arch=`arch` -F euid!=0 -S open`
`auditctl -a entry,always -F arch=`arch` -F euid!=0 -S stat`

Ceux-ci devraient attraper la tentative. Vous pouvez le trouver en faisant grep id_rsa sur votre journal d'audit pour voir la tentative d'ouverture. Si cela ne vous donne pas d'informations, creusez plus profondément avec la fonction chdir et autres seraient la voie à suivre, mais je suis assez confiant dans le fait que les open syscall va attraper cela.

Une fois que vous savez ce qu'il essaie de faire, vous pouvez déterminer si le chemin est relatif au répertoire personnel de l'utilisateur, au répertoire personnel d'un autre utilisateur, à la racine http, à la racine FS, etc.

Mise à jour

Ce site Tutoriel sur l'utilisation de ssh pour les mises à jour de Wordpress montre l'utilisation du chemin complet pour spécifier la clé.

Wordpress ssh connection info

0voto

Kevin Points 2006

Essayez ce plugin . Il vous permet de télécharger des clés privées SSH depuis votre ordinateur via le navigateur. Les clés publiques ne sont pas nécessaires.

0voto

Eaten by a Grue Points 282

Pour ceux qui utilisent apache, voici comment j'ai résolu le problème des permissions sur Ubuntu 14.04

Ajoutez d'abord le groupe de l'utilisateur, donc apache :

usermod -a -G myuser www-data

Il suffisait ensuite d'accorder des droits de lecture sur la clé privée :

chmod g+r /home/myuser/.ssh/id_rsa

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X