Apache compte d’utilisateur sans mot de passe sur le serveur – Ubuntu

J’ai le même problème que dans cette question. Si je l’explique encore, je peux utiliser rsync pour synchroniser mes données locales avec le serveur sans mot de passe (j’ai utilisé des clés SSH). Mais lorsque j’utilise la fonction exec () en PHP, cela ne fonctionne pas.

La personne qui a posé la question ci-dessus a donné la réponse par lui-même. Il dit que cela peut être fait en autorisant le compte d’utilisateur Apache à accéder au service sans mot de passe. Ma question est donc de savoir comment fournir un access sans mot de passe au compte d’utilisateur Apache sur le serveur .

Mon code PHP est:

echo exec('rsync -aze --progress --size-only /var/tmp/src/File01 [email protected]:/var/tmp/dest/File01'); 

PS: je me suis connecté à ma machine en utilisant mon compte utilisateur typique (disons que le nom d’utilisateur est « bob ») et j’ai généré des clés ssh-keygen -t rsa utilisant ssh-keygen -t rsa . Bob a ensuite un access sans mot de passe au serveur.

Mais, lorsque je lance une commande PHP, elle fonctionne sous Apache sous mod_php et Habituellement Apache s’exécute sous son propre compte utilisateur, indépendamment des utilisateurs réels qui utilisent le serveur. Par conséquent, mes clés générées ne sont pas disponibles pour PHP dans Apache.

J’ai donc essayé de me connecter en tant qu’utilisateur Apache (je pense que c’est www-data ). Mais la plupart des articles disent que www-data n’a pas de mot de passe par défaut et ne peut pas se connecter en tant que www-data .

Je vous remercie.

D’accord. Enfin trouvé la solution. Merci à tous ceux qui m’ont aidé.

Le problème était que l’utilisateur apache ne pouvait pas accéder à mes clés. Par conséquent, j’ai dû générer des clés ssh pour les utilisateurs d’Apache (c’est www-data), même si ce n’était pas très sécurisé. Première connexion en tant que root.

 mkdir /var/www/.ssh chown -R www-data:www-data /var/www/.ssh 

Maintenant, générez les clés ssh comme suit. Il sauvegardera votre clé privée et votre clé publique dans le dossier /var/www/.ssh.

 sudo -u www-data ssh-keygen -t rsa 

Maintenant, vous devriez obtenir quelque chose comme ça.

 root@sampath-Vostro-1520:/var/www/.ssh# sudo -u www-data ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/var/www/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /var/www/.ssh/id_rsa. Your public key has been saved in /var/www/.ssh/id_rsa.pub. The key fingerprint is: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx www-data@machine-Vostro-1520 The key's randomart image is: +--[ RSA 2048]----+ | ...o...o..| | o.. o| | + .. .+o| | . .*o+o| | ++ S ..B..| | o . E + | | . . oo | | . . | | | +-----------------+ 

Maintenant, copiez votre clé publique sur le serveur distant.

 sudo -u www-data ssh-copy-id -i /var/www/.ssh/id_rsa.pub [email protected] 

Maintenant cela devrait fonctionner. 🙂

  

J’espère que cela sera utile. Merci a tous.

Normalement, votre clé est chargée via un agent SSH, ce qui la rend automatiquement disponible. Au lieu de l’utiliser, vous pouvez spécifier manuellement un fichier d’identité. Si vous générez une clé à utiliser, tant qu’elle est lisible par Apache, elle peut être utilisée.

Rsync ne vous permet pas de spécifier directement le fichier identi mais vous pouvez transmettre des parameters à l’appel SSH sous-jacent:

 echo exec('rsync -az -e "ssh -i /var/www/key.pri" --progress --size-only /var/tmp/src/File01 [email protected]:/var/tmp/dest/File01');