Brauche scp mit www-Daten ohne Passwort

Brauche scp mit www-Daten ohne Passwort

Ich habe eine DMZ mit einem Webserver mit Ubuntu 11.04 und einem Anwendungsserver mit Ubuntu 11.10. Ich habe alles so eingerichtet, dass ich per SCP vom Webserver zum Anwendungsserver gelangen kann, indem ich

ssh-keygen
ssh-copy-id [email protected]

wobei 192.168.1.6 die lokale IP-Adresse des App-Servers und Peter mein Anmeldekontoname ist. Ich möchte die Dateien jedoch als Antwort auf einen Aufruf über eine LAMP-basierte Website mithilfe eines Befehls in einer PHP-Datei kopieren. Mein Problem ist, dass der „Benutzer“ meiner Webanwendungen www-data ist, was kein echter Benutzer ist, sodass ich keine Schlüssel dafür erstellen kann.

Ich habe das beschriebene Verfahren ausprobiertHier. Ich habe dann

su
su www-data

auf dem Webserver (ich schätze, der „Server“ gemäß der Berkeley-Diskussion). Leider werde ich immer noch nach dem Passwort gefragt, wenn ich versuche, per SCP auf den Anwendungsserver/Client zuzugreifen.

Ich habe es versucht

scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

Die Ausgabe war fast dieselbe wie beim (erfolgreichen) SCP vom Peter-Konto. Die letzten Zeilen sind jedoch anders.

debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /var/www/.ssh/id_dsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering ECDSA public key: /var/www/.ssh/id_ecdsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
[email protected]'s password: 

Ich wäre äußerst dankbar, wenn mir jemand sagen oder mir helfen könnte, das Problem zu finden.

Antwort1

Nachdem Sie den von Ihnen angegebenen Link gelesen haben: Stellen Sie sicher, dass Sie authorized_keys und nicht authorized_keys2 verwenden. Letzteres ist seit Jahren veraltet und funktionierte in einigen Versionen von OpenSSH überhaupt nicht.

Die einfachste Möglichkeit, dies zu diagnostizieren, ist eine Debug-Instanz des SSH-Servers. Führen Sie auf dem Server Folgendes aus:

# /usr/sbin/sshd -ddep 2222

... das den SSH-Daemon im Debugmodus ausführt und auf Port 2222 lauscht. Wiederholen Sie Ihren SCP-Befehl mit:

$ scp -o port=2222 ...

... und sehen Sie, was der Server sagt.

Zu Johns Sicherheitsbedenken: Wenn Sie sich entscheiden, das WWW-Datenkonto weiterhin zu verwenden, können Sie dessen Schlüssel mithilfe einer Option zum „erzwungenen Befehl“ in authorized_keys auf bestimmte Aktionen beschränken (wie etwa das Übertragen bestimmter Dateien).

Antwort2

Du hast gesagt, du hast es versucht

    scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

Der gewünschte Schlüssel erscheint jedoch nirgends. Versuchen Sie Folgendes:

    scp -vvv -i /path/to/private/key /var/www/Src/*.txt 192.168.1.6:/var/www/Dest

Sie sollten auf jeden Fall sicherstellen, dass Ihre Verbindung auf diesen bestimmten Befehl beschränkt ist. Ich bin mir nicht sicher, ob SCP Möglichkeiten zur Einschränkung von Befehlen bietet (wie z. B. erzwungene Befehle mit SSH). Ich würde stattdessen SSH über rsync verwenden, um sicherzustellen, dass nur ein rsync-Befehl gestartet wird. Dies bietet im Grunde denselben Dienst wie scp, aber Ihr Schlüssel kann dann mit einem Force-Befehl markiert werden, was sicherer sein kann.

Antwort3

Ich habe inotify verwendet, um die von John Gardeniers vorgeschlagene Methode zu implementieren. Es war einfach und funktioniert jetzt einwandfrei. Ich habe gerade eine C++-Anwendung geschrieben, die den SCP ausführt, wenn eine Datei im Verzeichnis geändert wird, wie es im PHP-Code möglich ist. Funktioniert einwandfrei.

Danke,
Peter

verwandte Informationen