Edit: Wegen vieler Änderungen an der Serverinfrastruktur im Fachbereich Telematik funktioniert dieses Script samt Anleitung nicht mehr.

#### Das aktuelle Script gibt es hier: http://kayuk.de/blog/2014/03/tmupdate-aktualisierung-sose-2014/

Trotz allem, hier noch der Original-Post:

Ich habe mir im Dezember 2013 ein kleines Bashscript geschrieben, das die Daten vom Telematikserver der TH Wildau mit einem lokalen Ordner synchronisiert. Dies soll der Versuch einer Dokumentation dieses Scripts sein.

Das Script benutzt Rsync zur Synchronisation. Es werden 2 Arrays erstellt um die Dozentenordner Online zu durchlaufen und die Daten dann jeweils mit einem lokalen Ordner abzugleichen.

Authentifizierung am Telematikserver:

Damit man nich jedes mal sein Passwort beim Durchlauf der Arrays eingeben muss, muss als erstes ein SSH-Key erzeugt werden, falls noch keiner vorhanden ist. Dieser muss dann auf den TM-Server kopiert werden. Dazu muss der Befehl ssh-keygen benutzt werden:

$ ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.


Danach muss der erzeugte Key auf den Telematikserver kopiert werden:

$ ssh-copy-id DEINANMELDENAME@www.tm.th-wildau.de
DEINANMELDENAME@www.tm.th-wildau.de's password:

ssh-copy-id kann auf dem Mac per homebrew installieren
Danach kann ggf. noch gecheckt werden, ob der Key auf auf dem Server liegt. Der müsste dann in ~/.ssh/authorized_keys liegen.
Von diesem Moment an müsstest du dich ohne Passwort am Server anmelden können:

$ shh DEINANMELDENAME@www.tm.th-wildau.de
[...Server blabla...]
DEINANMELDENAME@tms2:~$ exit
Abgemeldet
Connection to www.tm.th-wildau.de closed.


Man kann das Ganze auch hier noch einmal nachlesen (en): Serverfault.com - how to automate ssh login with password </p>

Verändern des Scripts:

Wenn das alles funktioniert können wir uns ans Verändern des Scripts machen.
Du kannst es ganz normal mit jedem Texteditor öffnen. Das Script ist weitestgehend so kommentiert, dass man die Veränderungen selbst vornehmen kann, ich werde hier dennoch alles einmal erklären:

USER - Hier wird dein Anmeldename eingegeben (der Selbe, den du zuvor zum ssh login benutzt hast)

STUDIENGANG - Hier wird das Kürzel deines Studiengangs eingetragen (= der Ordnername in den jeweiligen Dozenten-Ordnern)

SEMESTER - Der Ordner, der bei dir lokal das jeweilige Semester angibt

LOCALPATH - Der absolute Pfad der zu deinem Telematikordner führt (unter OSX z.B.: /Users/[UserName]/Documents/Telematik ; unter Linux z.B.: /home/[UserName]/Telematik)

Danach werden der Reihe nach die Namen der Dozenten eingegeben - genau so, wie sie auch auf dem TM-Server heißen.

Als nächstes müssen die Ordnernamen für die jeweiligen Fächer in genau der Reihenfolge wie die Dozenten eingeben werden - Sprich: “Da wo der Dozent #0 steht, muss nachfolgend auch das Fach dieses Dozenten bei #0 stehen!”

Für andere Semester und andere Dozenten müssen dann ggf. die Variablen verändert werden. Wichtig dabei ist nur, dass die vorgegebene Syntax eingehalten wird. Bei Veränderungen müssen dann natürlich auch die Einträge in den Arrays LOCALDIRS und REMOTEDIRS analog verändert werden. Auch hier gilt wieder: Reihenfolge beachten!!

Ich werde dann auch immer versuchen, für neue Semester auch Updates hier ins Blog hochzuladen.

Als letztes muss das Script noch ausführbar gemacht werden: $ chmod +x tmUpdate
Wenn es ausführbar ist, kannst du das Script nach /usr/local/bin kopieren um den Befehl direkt ins Terminal eingeben zu können.

Das Script kann per git von Github heruntergeladen werden.

git clone https://github.com/deg0nz/tmupdate.git

Hier ist der Download

Hier ist der Code des Scripts:

tmUpdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
#####################################################################
## Bashscript um automatisch neue Dateien vom ftp-Telematikserver der TH-Wildau
##(Aufgaben & Scripte) zu holen.
##
## Das Script ist auf OSX geschrieben, auf Linux und BSD sollte es aber
## auch funktionieren.
##
## Das Script erzeugt folgende Ordnerstruktur (sofern noch nicht vorhanden):
## /PATH/TO/HOMEDIR/SEMESTER/FACH1
##					.../FACH2
##					.../FACHXY/...
##
## In anderen Semestern müssen dann ggf. die Dozenten, Ordner uns Arrays angepasst werden
##
## !!WICHTIG!!
## Zur Authentifizierung auf dem Server ist es notwendig, dass SSH
## keys für Client und Server erzeugt und übertragen wurden.
## Anleitung hier:
## http://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password
##
##	Copyright 2013 (MIT) by Benjamin Gericke
##	Twitter: @deg0nz
##	ADN: @deg0nz
##
## version beta 0.8 // Configurable first version Wintersemester2013/14
#####################################################################


#####################################################################
# Nachfolgend ggf. Änderungen vornehmen
#####################################################################

# Username eingeben
USER='tmstudent'

# Studiengang
STUDIENGANG='T13'

# Welches Semester? (= Ordner für Semester - !!Keine Slashes!!)
SEMESTER='Wintersemester 13_14'

# Hier den absoluten lokalen Pfad zu den Telematik-Dateien eintragen
# z.B.: /Users/[UserName]/Documents/Telematik
LOCALPATH='/Users/deg0nz/Telematik/'


# Deine Dozenten auf dem Telematikserver mit
# folgender Semantik eintragen (=Ordnernamen auf Server)
# (Reihenfolge muss mit den Ordnern in LOCALs identisch sein.)

#0
IKO='Wilkes'
#1
PSE='Mohnke'
#2
TI='Mohnke'
#3
PUEM='Richartz'
#4
PUEM_LABOR='Hoppe'
#5
MATHE='Weissbach'
#6
KPR='Bialas'


# Ordnernamen für Fächer lokal (Reihenfolge muss identisch mit Dozenten sein!!)

#0
IKO_LOCAL='Internetkommunikation'
#1
PSE1_LOCAL='Programmierung und Software Engineering 1'
#2
TI_LOCAL='Technische Informatik'
#3
PUEM_LOCAL='Physik der Übertragungsmedien'
#4
PUEM_LABOR_LOCAL='Physik der Übertragungsmedien Labor'
#5
MATHE_LOCAL='Mathematik I'
#6
KPR_LOCAL='Präsentations- und Kommunikationstraining'


#
# Create array for local Folders
#
LOCALDIRS[0]=$IKO_LOCAL
LOCALDIRS[1]=$PSE1_LOCAL
LOCALDIRS[2]=$TI_LOCAL
LOCALDIRS[3]=$PUEM_LOCAL
LOCALDIRS[4]=$PUEM_LABOR_LOCAL
LOCALDIRS[5]=$MATHE_LOCAL
LOCALDIRS[6]=$KPR_LOCAL

#
# Create array for remote folders
#
# following line is deprecated
# REMOTEDIRS=( 'Wilkes' 'Mohnke' 'Richartz' 'Hoppe' 'Weissbach' 'Bialas' )
#
REMOTEDIRS[0]=$IKO/$STUDIENGANG/IKO
REMOTEDIRS[1]=$PSE/$STUDIENGANG/PSE1
REMOTEDIRS[2]=$TI/$STUDIENGANG/TI
REMOTEDIRS[3]=$PUEM/$STUDIENGANG/PUeM
REMOTEDIRS[4]=$PUEM_LABOR/$STUDIENGANG/PUeM
#Freizeichen für Mathe umgehen:
MAEINS='MA\ I'
REMOTEDIRS[5]=$MATHE/$STUDIENGANG/$MAEINS
REMOTEDIRS[6]=$KPR/$STUDIENGANG


#####################################################################
# Do not change anything beneath this line! (Unless you know what you are doing ;)
#####################################################################

# Adresse zum Server - Das muss normalerweise nicht verändert werden
HOST='www.tm.th-wildau.de'

# Pfad auf Server zu den Aufgaben und Scripten
REMOTEPATH='/home/tms1/post/Aufgabe'


# thetime
NOW=$(date +"%B-%d-%Y %T")
# echo begin sync
echo "********************************"
echo "The time is now $NOW"
echo "Starting sync..."
echo "********************************"


# for-loop to check all items in remote-folder-Arrays and local-folder-Arrays and
# execute rsync for each folder
for (( i=0; i < ${#REMOTEDIRS[@]}; i++ ))
do
	echo "--------------------------------------------------------------------------------"
	echo "Syncing from remote folder ${REMOTEDIRS[$i]} to local folder ${LOCALDIRS[$i]}.."
	echo "--------------------------------------------------------------------------------"
	echo "New Files:"

	rsync -ave ssh $USER@$HOST:$REMOTEPATH/"${REMOTEDIRS[$i]}"/ $LOCALPATH/"$SEMESTER"/"${LOCALDIRS[$i]}" -h --human-readable

done

#echo end sync
echo "********************************"
echo "Sync finished! Bye."
echo "********************************"


exit 0