Am Sonntag, 29. Oktober 2006 02:00 schrieb David Haller: Hallo David,
b) die pragmatische Loesung, einfach "drueberbuegeln":
das habe ich mir anfangs auch gedacht, will ich aber nicht mehr. Auch muss man aufpassen, wenn frontpage installiert ist, dann gibt es zB -rw------- bei service.pwd 644 wäre also nicht so gut. Ich habe das Problem so gelöst, dass ich Frontpage völlig deinstalliert habe, brauche ich ja nicht, war nur vorinstalliert.
c) die pragmatische, mitbekommenwoll Loesung:
Ja, ich will da schon was mitbekommen. Ich glaube noch immer, dass da irgenein Script im Datacenter die Rechte mehr oder wenig zufällig versaut hat. Ich bin mir sicher, dass ich nicht die Rechte bei _allen_ betroffenen Accounts kaputt gemachte habe (1 Account lasse ich mir vielleicht einreden) und der Hoster "schwört", dass von seiner Seite keine Rechte geändert wurden. Ich suche also nach einer Lösung, wie ich so ein Problem möglichst schnell entdecke und automatisch korrigiere. Der Hoster wird dann sicher gewechselt, aber die Migration braucht ja auch Zeit.
d) koennte sein, das du auf die Befehle in ein Script auf dem entfernten Rechner packst und dann eben:
ssh "${NUTZER}@${DOMAIN}" '~/bin/rechtesetzen.sh'
Ich weis nicht, ob das klug ist, wenn man misstraurisch gegenüber dem Hoster ist.
Siehe oben bzgl. evtl. guenstigerer Loesungen, was Meldungen angeht, aber wenn du eine Mail willst, wenn die Rechte neu gesetzt werden sollte folgendes gehen:
ssh "${NUTZER}@${DOMAIN}" ' if test `stat -c "%a" ~/public_html` -ne 755; then \ find ~/public_html -type d -print0 | xargs -r -0 chmod 755; \ echo "Verzeichnisrechte neu gesetzt"; \ fi; \ if test `stat -c "%a" ~/public_html/index.html` -ne 644; then \ find ~/public_html -type f -print0 | xargs -r -0 chmod 644; \ echo "Dateirechte neu gesetzt"; \ fi' | mail -s "Rechte auf $DOMAIN" `id -n` # ^- ab hier lokal
Die Pipe zu 'mail' kann lokal sein, denn STDOUT der remote shell ist stdout des ssh-Befehls. Wenn du die Mails remote senden willst:
Das weis ich noch nicht, ob es für mich einen Unterschied macht. Ursprünglich ging ich davon aus, dass ich remote senden will. Letztlich ist es aber egal, ich will es nur dokumentiert haben.
ssh "${NUTZER}@${DOMAIN}" ' { if test `stat -c "%a" ~/public_html` -ne 755; then \ [..] fi; \ } 2>&1 | mail -s "Rechte auf '"${DOMAIN}"'"... empfaenger@bla.tld' # ^ ^- Anf.z. ^^^^^|^^^^^ ^- Anfuehrungsz. remote zu # | remote auf | # | `- wird vor Uebergabe an ssh lokal # | expandiert, in lokalen Anf.z. # `- Ausgaben remote zusammenfassen
Ja, da muss man beim Quoten ziemlich aufpassen ;)
Aber was auch geht: ssh frisst das Shellscript auch von stdin, z.B.:
cat <
&1 ## stdout auf stdin umbiegen if test \`stat -c '%a' ~/public_html\` -ne 755; then find ~/public_html -type d -print0 | xargs -r -0 chmod 755 echo "Verzeichnisrechte neu gesetzt" fi if test \$(stat -c '%a' ~/public_html/index.html) -ne 644; then find ~/public_html -type f -print0 | xargs -r -0 chmod 644 echo "Dateirechte neu gesetzt" fi EOF Bei dieser Form werden Variablen $FOO, `` und $() im Here-Dokument interpretiert, ein ~ aber erst remote. Wenn man
cat <<'EOF' | ...
verwendet nicht. '' und "" koennen in beiden Faellen als Quotezeichen verwendet werden (die so auch weitergegeben werden).
Umgehen kann man's durch escapen (s.o.), ich hab oben mal beide Varianten drin.
Ziemlich kompliziert. Ich werde mal testen. Vielen Dank! Al