-> 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...