2016-11-05 2 views
2

Ich bin ein Hook zwischen Github und meinem Server einrichten, die automatisch neue Commits ziehen kann, wenn das Skript von Github Anfragen ausgelöst wird.Github Authentifizierung fehlgeschlagen mit Benutzer www-Daten

Es ist alles Einstellung abgeschlossen, wie ssh-keys, git Herkunft. Ich kann einen neuen Commit von meinem privaten Repo durchführen, der auf Github gehostet wird, indem ich git pull origin master laufen lasse. Es funktioniert gut mit der Shell.

Aber wenn ich diesen Befehl in eine deploy.php Datei schreibe, kann es von Github ausgelöst werden, aber mit Fehlermeldung.

Host key verification failed. fatal: Could not read from remote repository. 
Please make sure you have the correct access rights and the repository exists. 

Danach laufe ich einen Befehl whoami durch die PHP-Datei, es gibt Benutzer www-data.

Eigentlich habe ich generieren einen Schlüssel für www-data Benutzer, und legte sie in /var/www/.ssh, auch id_rsa.pub kopiert und auf Github eingefügt, noch einen Authentifizierungsfehler haben.

  • nginx
  • Alle Dateien www-data:www-data
  • Ich habe gehören gesetzt www-data die öffentlichen Schlüssel an den deploy Schlüssel des Repo hinzufügen.
Die deploy.php Befehl
shell_exec("cd /var/www/html/tinfo/; git pull origin master 2>&1;"); 

Meine Frage ist

  1. Wie ein Schlüssel für www-data zu schaffen?
  2. Ist www-data 's .ssh directory /var/www/.ssh?
  3. Wenn ich nicht falsch liege, warum verweigert Github meine Verbindung? Ich schätze, es handelt sich um den Benutzer www-data, der deploy.php Datei ausführen und Befehle über PHP ausführen.
  4. Wenn mit Github-Server gesprochen wird, sendet www-data nicht seinen privaten Schlüssel an den Server?

Vielen Dank.

+0

Ich denke, das sollte ein Bash-Skript sein – meda

Antwort

1

Dieses Problem wurde mit dem Hinzufügen von GitHub zu bekannten Hosts nach Benyis Kommentar gelöst.

ssh-keyscan -t rsa github.com >> /var/www/.ssh/known_hosts 

Sie sollten zuerst ssh-Schlüssel angeben. Danach solltest du Aufgaben erledigen, was du willst.

1-) Ssh-Schlüssel sind nicht benutzerspezifisch. Sie können also überall ein rsa-Schlüsselpaar erstellen. Der öffentliche Schlüssel sollte nach GitHub kopiert werden. Der private Schlüssel sollte auf Ihrem Host platziert werden.

2-) In der Linux-Umgebung befindet sich der Standardverzeichnispfad .ssh im Home-Verzeichnis des Benutzers. Wenn Sie den Benutzerordner des Benutzers nicht angeben, sollte er in /home/www-data/.ssh sein. Wenn Sie nicht auf diesen Ordner zugreifen können, sollten Sie Ihren ssh-Schlüssel angeben, der in meinem Beispiel geschrieben wurde.

3-) In Linux-Umgebung, deploy.php ausgeführt von Benutzer, der nginx Prozess ausführt.Üblicherweise werden apache2 und nginx Prozesse von www-data user ausgeführt.

4-) Sie sollten Ihren ssh-Schlüsselpfad zum Senden dieser Schlüsseldatei für die Autorisierung angeben, wenn Sie mit dem Github-Server sprechen.

+0

Vielen Dank für hilfreiche Meinungen. Schließlich habe ich folgendes gefunden: 1. Erzeuge einen Schlüssel für 'www-data' durch' $ sudo -u www-data ssh-keygen -t rsa'. 2. Lade Schlüssel nach Github hoch. 3. Erzeuge 'bekannte_Hosts' für' www-data' durch '$ ssh-keyscan -H github.com >>/var/www/.ssh/known_hosts' 4. chmod alle Dateien, die zu' www-data: www-data' gehören. – Benyi

+0

Gut zu hören. –

+0

Danke für die Bearbeitung der Antwort. Ich glaube, dass es Leute gibt, die mit der Ablehnung der Authentifizierung verwechseln. Hoffe, meine Erfahrung wäre Hilfe. Und danke für die Meinungen. – Benyi

Verwandte Themen