Hallo Gerhard, * Gerhard Wolfstieg <gw@wolfstieg.com> [20050726 17:09]: > On Tue, 26 Jul 2005 16:30:12 +0200 > "Felix M. Palmen" <zirias@despammed.com> wrote: > > zu dem Zweck habe ich mir jetzt aber einfache > > Scripts zur Softwareverteilung im Netz geschrieben. > > Oh, Spitze! Auf die Idee bin ich noch nicht gekommen. Mags Du das > hierhin posten? Ok, kurze Anleitung: Voraussetzungen: - perl - rsync - OpenSSH 1. Server einrichten: ~~~~~~~~~~~~~~~~~~~~~ Auf dem Server zunächst ein Verzeichnis unter /etc (für den SSH-Key) und eines unter /opt (für die zu verteilende Software) anlegen. Ich hab beide mal "global" genannt. Dann als erstes einen SSH-Key ohne Passphrase erstellen: ssh-keygen -t rsa -N "" -C global -f /etc/global/id.global Den public key zu den authorized_keys von root hinzufügen (man kann auch einen anderen Benutzer nehmen, wenn man der Sache nicht traut): cat /etc/global/id.global.pub >>~/.ssh/authorized_keys Dann ~/.ssh/authorized_keys editieren und vor den key (letzte Zeile) folgendes schreiben: from="*.localnet.example",command="/usr/local/bin/global-rsync.pl" und mit einem Leerzeichen vom folgenden ssh-rsa abtrennen. In from sollten natürlich die Rechner stehen, die später ihre Software in /opt/global vom Server beziehen sollen. Das Script /usr/local/bin/global-rsync.pl lässt nur das lesen von /opt/global via rsync zu und sieht folgendermaßen aus: --- #!/usr/bin/perl -w use strict; my $command = $ENV{'SSH_ORIGINAL_COMMAND'}; if (($command) && ($command =~ /^rsync +--server +--sender +-[logDtprz]+ +\. +\/opt\/global$/ )) { system $command; } else { print STDERR "Dieser SSH-Key kann nur für die Synchronisation lokal ". "installierter Software im LAN benutzt werden.\n"; exit 1; } --- Auf dem Server kann man dann eben Software in /opt/global installieren und legt noch eine spezielle Textdatei /opt/global/symlinks.conf an, in der alle Binaries (relativ zu /opt/global) aufgeführt sind, die auf den Clients in /usr/local/bin verlinkt sein sollen. Sieht bei mir z.B. so aus: --- bin/firefox j2re/bin/java j2re/bin/java_vm thunderbird/thunderbird acrobat/bin/acroread realplayer/realplay --- 2. Clients einrichten: ~~~~~~~~~~~~~~~~~~~~~~ /etc/global vom Server auf jeden Client kopieren. Überprüfen, dass /etc/global/id.global nur von root gelesen werden kann (600). (id.global.pub darf dagegen world-readable sein). Die Clients brauchen dann folgendes init-Script /etc/init.d/syncglobal: --- #!/bin/sh KEY=/etc/global/id.global HOST=server.lan.example SSH="/usr/bin/ssh -oBatchMode=yes -i $KEY" DAEMON=/usr/bin/rsync case "$1" in start) echo -n "Synchronisiere /opt/global von $HOST: .." PID=`mktemp -t syncglobal.pid.XXXXXX` /sbin/start-stop-daemon -S -p $PID -m -x $DAEMON -b -- -aze "$SSH" \ --delete $HOST:/opt/global /opt/ sleep .5 while /sbin/start-stop-daemon -K -p $PID -t -x $DAEMON >/dev/null 2>&1 do echo -n . sleep 1 done echo fertig. rm -f $PID cd /usr/local/bin /usr/bin/find . -lname /opt/global/\* -exec rm -f \{\} \; test -r /opt/global/symlinks.conf || exit 0; echo -n "Verlinke Anwendungen:" for program in `cat /opt/global/symlinks.conf` do progname=`basename $program` echo -n " $progname" ln -fs /opt/global/$program done echo . ;; stop) ;; restart) $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 --- HOST am Anfang vom Script auf den Namen (oder die IP-Adresse) des Servers setzen. Falls man einen anderen User als root auf dem Server benutzt hat, <user>@ davorschreiben. Ein Aufruf von /etc/init.d/syncglobal start erledigt alles automatisch. Also am besten in rc2.d bis rd5.d z.B. unter S90 verlinken. Das war's, ich hoffe es läuft bei dir genauso gut wie bei mir. Die Option mit dem anderen User auf dem Server habe ich allerdings selbst nicht ausprobiert, ich vertraue den Restriktionen in ~root/.ssh/authorized_keys. Grüße, Felix -- | /"\ ASCII Ribbon | Felix M. Palmen (Zirias) http://zirias.ath.cx/ | | \ / Campaign Against | fmp@palmen.homeip.net encrypted mail welcome | | X HTML In Mail | PGP key: http://zirias.ath.cx/pub.txt | | / \ And News | ED9B 62D0 BE39 32F9 2488 5D0C 8177 9D80 5ECF F683 |
Attachment:
signature.asc
Description: Digital signature