-> Własnie, a tu już wymagany jest perl. Ja mam routery na -> dyskach flash -> 32MB, nie ma tam miejsca na perla, z tego powodu robotę robi -> centralny -> lms i to on robi dystrybucję.
Tak sobie pomyślałem, że warto rozwinąć ten wątek. Jeśli nie jest problemem posiadanie na routerach SSH to można to wykonać w stosunkowo łatwy sposób:
Na poczatku, na serwerze, na którym "urzęduje" LMS:
`ssh-keygen -b 1024 -f ~/.ssh/identity -t rsa -P ""` `scp ~/.ssh/identity.pub konto_odbierające_plik@adres_IP_Routera:~/.ssh/authorized_keys`
później już można używać polecenia scp/ssh bez konieczności podawania hasła.
Na przykład:
`scp /sciezka/do/pliku/plik.conf konto_odbierające_plik@adres_IP_routera:/sciezka/na/routerze/`
Pamiętajmy, że "konto_odbierające_plik" musi mieć prawa zapisu do '/sciezka/na/routerze/' na routerze oraz, że polecenie scp musi być wydane z konta, na którym został uruchomiony ssh-keygen.
Jeśli natomiast chcielibyśmy polecenie scp uruchamiać z jakiegokolwiek innego konta (na przykład jako user 'www'), należy umieścić wygenerowany pliczek '~/.ssh/identity' w jakimś miejscu, do którego ma dostęp user 'www' i dodać do sładni polecenia scp parametr: '-i /sciezka/do/pliku/identity'
polecenie mogłoby wówczas wyglądać tak:
`scp -i /sciezka/do/pliku/identity /sciezka/do/pliku/plik.conf konto_odbierające_plik@adres_IP_routera:/sciezka/na/routerze/`
Żeby to jakoś lepiej zobrazować, przygotowałem przykładowy, dość prymitywny skrypcik. Skrypt potrafi, po podaniu prawidłowego parametru wykonać dwie czynności:
1. Skopiować lokalny plik na zdalną maszynę przy użyciu SCP. Na przykład: `./nazwa_skryptu.sh kopiuj`
2. Uruchomić polecenie na zdalnej maszynie przy użyciu SSH. Na przykład: `./nazwa_skryptu.sh odpal`
3. Wykonać obie powyższe czynności na raz :-) Na przykład: `./nazwa_skryptu.sh total`
-------- początek skryptu --------- #!/usr/bin/env bash
# definicje:
ROUTER_ADDRESS="192.168.0.2" ROUTER_USER="zenon"
# tu wpisz miejsce przechowywania # pliku 'identity' ID_FILE="/home/zenon/.ssh/identity"
# tu podaj dodatkowe parametry scp (jeśli będą potrzebne). # Na przykład port, na którym słucha ssh # na routerze: "-P 2222" SCP_PARAM="-P 22"
[ ${ID_FILE} ] && SCP_PARAM="-i ${ID_FILE} ${SCP_PARAM}"
# tu wpisujesz plik, # który ma być skopiowany na router: SRC_CONF_FILE="/etc/hosts"
# tu podajesz ścieżkę # dokąd na routerze chcesz skopiować pliczek: ROUTER_PATH_FOR_FILE="/tmp/"
# tu można podać dodatkowe parametry ssh, # niezbędne do połączenia się z routerem LOCAL_SSH_OPTS="-p 22"
# Tu wpisujemy polecenie # jakie ma zostać wykonane na routerze. # Na przykład: RUN_AT_ROUTER="cat -s /etc/hosts"
[ ${ID_FILE} ] && LOCAL_SSH_OPTS="-i ${ID_FILE} ${LOCAL_SSH_OPTS}"
#-------- koniec konfiguracji ------
SSH_PROG=`which ssh` SCP_PROG=`which scp`
kopiuj() { $SCP_PROG ${SCP_PARAM} ${SRC_CONF_FILE} ${ROUTER_USER}@${ROUTER_ADDRESS}:${ROUTER_PATH_FOR_FILE} }
uruchom() { ${SSH_PROG} ${LOCAL_SSH_OPTS} ${ROUTER_USER}@${ROUTER_ADDRESS} -o Batchmode=yes ${RUN_AT_ROUTER} }
[ -z $1 ] && echo "Do uruchomienia skryptu potrzebny jest parametr: "kopiuj" lub "odpal" lub "total"" && exit 1 [ $1 = kopiuj ] && kopiuj [ $1 = odpal ] && uruchom [ $1 = total ] && kopiuj && uruchom [ $1 = kopiuj ] || \ [ $1 = odpal ] || \ [ $1 = total ] || \ echo "Podano niewlasciwy parametr. Prawidlowy parametr to: "kopiuj" lub "odpal" lub "total"" && exit 1
--------- Koniec skryptu ---------
Mam nadzieję, że komuś się przyda ;-)
Pozdrawiam,
Jacek Ufnal Admin tu i ówdzie...