i-soft
Goto Top

Shell Scripting zum Erzeugen und Speichern von .htaccess und .htpasswd Dateien mit variablen Verzeichnisnamen und Übergabe an Cronjob zur Automatisierung.

Hallo Community,

ich habe mich hier im Forum neu angemeldet, weil ich auf meiner Arbeit an einem Problem arbeite, an dem ich mir momentan richtig die Zähne ausbeisse. Da ich vor kurzem erst meine Ausbildung zum Informatiker abgeschlossen habe und ich noch viel lernen muss, wage ich heute den Schritt in dieses Forum. Nun gut, also zu meinem Problem.

Ich habe vor kurzem eine Lernplattform für die Arbeit mit unseren Kunden auf ein Debian System installiert. Der Zugriff auf die Lernplattform (Webserver) erfolgt aus dem Internet heraus und wird durch htaccess geschützt. (Kunde wollte es so.) Da von seiten meines Unternehmens gewünscht wird, das jeder Kunde eine eigene Installation (mit eigenem Verzeichnisnamen) für die Lernplattform auf dem Server erhalten soll, muss jede einzelne Installation der Lernplattform mit einer .htaccess und .htpasswd Datei versehen werden.

Das habe ich auch alles gelöst bekommen, nur ich komme einfach nicht weiter bei der Automatisierung. Da ich jedesmal für einen Kunden, eine Installation vornehmen muss, wo ich diverse Arbeiten ausführen muss, wie ein neues Verzeichnis erstellen + zufälligen Verzeichnisnamen vergeben, Dateirechte vergeben, Datenbank erzeugen, Datenbank überprüfen, Datenbank Backup, Nutzer nach X Tagen inaktiv schalten und nach X Tagen löschen etc., habe ich ein Shell Script angelegt das soweit gut funktioniert.

Nur ich stehe momentan auf dem Schlauch, beim Einbinden der .htaccess und htpasswd Datei.

Beispiel:

Ich habe eine Abfrage im Shell Script eingebaut:

echo -e "Bitte geben Sie den Verzeichnisnamen des zu erstellenden Kunden an:"
read verzeichnis

Wenn nun das Verzeichnis erstellt wurde und die Installation abgeschlossen ist, so soll die .htaccess und die .htpasswd Datei ebenfalls für den Kunden neu erstellt werden.
Der Inhalt der .htaccess Datei soll in meinem Script selber durch eine Schleife ausgelesen werden und der Pfad zur .htpasswd Datei soll aus der Variablen $verzeichnis kommen, die ich vorher durch die Abfrage auf der Konsole eingegeben habe. Danach soll der komplette Inhalt in eine neue .htaccess Datei geschrieben werden. Beide Dateien .htaccess und .htpasswd sollen im jeweiligen Kundenverzeichnis liegen.

So in etwa (Ist nur ein Beispiel/keine Gewähr auf Richtigkeit):

while [ Bedingung ??????]
do
echo "AuthType Basic">.htaccess
echo "AuthName "Zugriff verweigert - Bitte User und Passwort eingeben"">.htaccess
echo "AuthUserFile /var/www/$verzeichnis/.htpasswd">.htaccess
echo "Require valid-user">.htaccess
done

Danach soll dann ebenfalls die .htpasswd Datei erzeugt werden.

htpasswd -c /var/www/$verzeichnis/.htpasswd benutzername

Auch hier soll wieder die Variable $verzeichnis das neue Kundenverzeichnis sein und aus der vorherigen Abfrage durch Eingabe auf die Konsole stammen. Ich möchte das komplette Installationsszenario inklusive aller weiteren Arbeiten in einem Script verarbeiten um dann später dieses Script im Cronjob laufen zu lassen.

Ich hoffe es kann mir jemand auf die Sprünge helfen.

Mit freundlichen Grüßen

i-soft

Content-Key: 252298

Url: https://administrator.de/contentid/252298

Printed on: April 19, 2024 at 04:04 o'clock

Member: SlainteMhath
Solution SlainteMhath Oct 17, 2014, updated at Oct 18, 2014 at 11:11:43 (UTC)
Goto Top
Moin,

ich weis nicht ob ich das jetzt ganz Verstanden habe...
echo -e "Bitte geben Sie den Verzeichnisnamen des zu erstellenden Kunden an:"  
read verzeichnis

cat /alte/.htaccess | grep -v "AuthUserFile" > $verzeichnis/.htaccess  
echo "AuthUserFile /var/www/$verzeichnis/.htpasswd"> $verzeichnis/.htaccess  

htpasswd -c /var/www/$verzeichnis/.htpasswd benutzername

Ohne Gewähr face-smile

lg,
Slainte
Member: i-soft
i-soft Oct 18, 2014 updated at 11:14:32 (UTC)
Goto Top
Hallo Slainte, liebe Community

vielen Dank für Deinen Lösungsansatz, das kommt dem schon sehr nahe. Ich habe gerade deine Lösung ausprobiert, sie funktioniert in etwa so wie es soll, nur das ich dann in der neuen .htaccess Datei eine Zeile zu stehen habe.

AuthUserFile /var/www/$verzeichnis(hier steht der Kundenverzeichnisname)/.htpasswd

Ich würde gern den kompletten Inhalt der .htaccess Datei haben wollen inklusive der oberen Zeile. Also so in etwa,

Inhalt der .htaccess Datei:

AuthType Basic
AuthName "Zugriff verweigert - Bitte User und Passwort eingeben
AuthUserFile /var/www/$verzeichnis(hier steht der Kundenverzeichnisname/.htpasswd
Require valid-user

Deswegen habe ich mir, wie oben die Lösung mit der Schleife ausgedacht, nur leider komme ich nicht drauf, da wenn ich versuche die Schleife durchlaufen zu lassen entweder ein Fehler rausgeschmissen wird bzw. er nur die letzte Zeile: Require valid-user in der neuen Datei zu stehen hat. Dann kam ich auf die Lösung das ich eine Schleife baue mit while read line.

Beispiel:

while read line
do
echo $line
done<alte-htaccess-datei

So bekomme ich alle Zeilen aus der alten Datei ausglesen, aber da funktioniert es wieder nicht mit dem variablen Verzeichnisnamen des Kunden, da nur die alte htaccess Datei durch die Schleife gejagt wird und dort ja der Inhalt 1 zu 1 übernommen wird. Meine nächster Lösungsansatz war eine for Zählschleife einer bestimmten Anzahl an Durchgängen.

z.B.

for now in 1
do
echo "AuthType Basic">htaccess
echo "AuthName "Zugriff verweigert - Bitte User und Passwort eingeben"">htaccess
echo "AuthUserFile /var/www/$verzeichnis(hier steht der Kundenverzeichnisname/.htpasswd">htaccess>htaccess
echo "Require valid-user">htaccess
done

Und wieder bekomme ich nur die letzte Zeile in der neuen Datei. Irgendwie funktioniert die Umleitung in die neue htaccess Datei nicht. Mir fehlt glaube ich noch irgendein Zusatz.

Ich freue mich auf weitere Lösungsvorschläge.

Mit freundlichen Grüßen

i-soft
Member: i-soft
i-soft Oct 18, 2014 at 11:22:59 (UTC)
Goto Top
Hallo liebe Community,

ich bin durch etwas rumprobieren selber auf eine Lösung gekommen. Es gibt vielleicht verschiedene Ansätze, hier nochmals vielen Dank an Slainte, aber meine Lösung genügt um mein Vorhaben zu realisieren.

Hier meine Lösung (als Beispiel):

echo -e "Bitte geben Sie das Verzeichnis an:"
read verzeichnis
for now in 1
do
echo "AuthType Basic"
echo "AuthName "Zugriff verweigert - Bitte User und Passwort eingeben""
echo "AuthUserFile /var/www/$verzeichnis/.htpasswd"
echo "Require valid-user"
done>/var/www/$verzeichnis/.htaccess

Über weitere Lösungsansätze würde ich mich sehr freuen.

Mit freundlichen Grüßen

i-soft
Member: colinardo
Solution colinardo Oct 18, 2014, updated at Oct 20, 2014 at 17:58:12 (UTC)
Goto Top
Hallo i-soft,
@SlainteMhath hatte nur einen Mini-Fehler
in seinem Script, es fehlte in Zeile 5 des Scripts nur ein zusätzliches > Zeichen damit die Zeile stattdessen anhängt wird :
echo "AuthUserFile /var/www/$verzeichnis/.htpasswd">>$verzeichnis/.htaccess   
Grüße Uwe
Member: i-soft
i-soft Oct 25, 2014 at 11:31:26 (UTC)
Goto Top
Hallo liebe Comunity,

ich habe nun auf der Arbeit das Script benendet und es funktioniert einwandfrei. Auch hier nochmals vielen Dank an colinardo für den Hinweis.

Vielen Dank an alle.

Grüße

i-soft