Normalerweise sind diese Bookmarks relativ flott mit Hilfe des Texteditors meiner Wahl erstellt (siehe dieser Artikel).
Bei einem Freund von mir, dem ich öfters in seiner Agentur aushelfe und der eine gewisse Personalfluktuation hat, ist dies allerdings so langsam zu einer zeitintensiven Angelegenheit geworden, da ich auch Benutzername und Passwort für den Serverzugriff mit im Bookmark speichere und für jeden neuen Mitarbeiter sämtliche Bookmarks komplett neu erstellen muss.
Deshalb habe ich mir nun – endlich nach Jahren – ein Shell-Skript für diesen Zweck geschrieben (welches inzwischen ein Perl-Skript geworden ist, da mir das Parsen der Server-Konfigurationen im Skript mit Bash etwas zu blöd wurde).
Zu meiner Ãœberraschung handelt es sich bei diesen Bookmarks um XML-Dateien. Obwohl man zum Beispiel nur den Text
smb://admin:admin@172.17.61.12/documentsvon einem Texteditor auf den Desktop zieht, erstellt das System im Hintergrund statt einem Text-Snippet eine XML-Datei. Zieht man diese Datei wieder zurück in den Texteditor, bekommt man nur den anfangs vorgegebenen Text zu sehen (das ist bei den via Skript erstellten Bookmark-Dateien seltsamerweise nicht mehr der Fall).
Deshalb konnte ich erst nicht verstehen, wieso meine automatisiert erstellten Bookmarks nicht funktionieren. Bis ich darauf kam, dass mich TextWrangler hier das erste Mal verarscht und nicht den 100%igen Inhalt der geöffneten Datei wiedergibt.
Bei folgendem Skript können im oberen Teil einzelne Serververbindungen eingetragen werden, die dann bei Skriptaufruf als einzelne Bookmarks erstellt werden, welche dann (optional) den Benutzername und das Passwort enthalten, was beim Skriptaufruf mitgegeben wurden.
Sollten die Developer-Tools nicht installiert sein, ist die Zeile 71
SetFile -a E $filenameauszukommentieren oder zu entfernen, da der
SetFile-Befehl mit den Developer-Tools installiert wird und ansonsten nicht vorhanden ist.
Durch diesen Befehl wird die Dateiendung des Bookmarks (.inetloc, .webloc, etc) ausgeblendet, was die Bookmarks etwas übersichtlicher machen würde.
Die Bookmarks werden an der Stelle erstellt, von der aus das Skript ausgeführt wird, nicht an der Stelle, an der die Skript-Datei liegt.
use strict;
################################################################################
# Die zu erstellenden Bookmarks #
# #
# Eine Serververbindung je Zeile: #
# - Name des Bookmarks (späterer Dateiname) #
# - Protokoll (afp/smb/vnc/http/https/ftp) #
# - Adresse/Freigabe durch Leerzeichen getrennt #
# - Optional: no_cred, um bei diesem Bookmark keine Zugangsdaten zu speichern #
# #
################################################################################
my $bookmarks = <<'END_BOOKMARKS';
Agentur smb 172.17.61.12/Agentur
FTP-Server smb 172.17.61.12/Public no_cred
Bildschirmzugriff-Server vnc admin:verysecret@172.17.61.12 no_cred
END_BOOKMARKS
################################################################################
my $uname = @ARGV[0];
my $upass = @ARGV[1];
my $cred = "";
my %extensions = (
"smb" => "inetloc",
"afp" => "inetloc",
"http" => "webloc",
"https" => "webloc",
"ftp" => "ftploc",
"vnc" => "vncloc"
);
if ($uname eq "") {
print "\nVerwendung:\n";
print "createBookmarks.pl BENUTZERNAME PASSWORT Benutzername und Passwort in Bookmarks einfügen\n";
print "createBookmarks.pl BENUTZERNAME Benutzername in Bookmarks einfügen\n";
print "createBookmarks.pl --nouser Keinen Benutzername und Passwort einfügen\n\n";
exit(0);
}
# Zugangsdaten-String
if ($uname ne "--nouser") { $cred = $uname; }
if ($upass ne "") { $cred .= ":$upass"; }
if ($cred ne "") { $cred .= "@"; }
# Bookmarks erstellen
for my $server (split(/\n/, $bookmarks)) {
my ($name, $protocol, $url, $noCred) = split(/\s+/, $server);
my $filename = "$name.$extensions{$protocol}";
open(OUT,">$filename") or die("Konnte Datei für Bookmark $name nicht erstellen");
print OUT "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
print OUT "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">";
print OUT "<plist version=\"1.0\">";
print OUT "<dict>";
print OUT " <key>URL</key>";
print OUT " <string>$protocol://", (($noCred eq "no_cred") ? "" : $cred) . "$url</string>";
print OUT "</dict>";
print OUT "</plist>";
close(OUT);
`SetFile -a E $filename`; # Nur, falls Developer-Tools installiert sind
}
Nehmen wir an, ich führe das Skript wie folgt aus:
./createBookmarks.pl apfelz secretpass
So erhalte ich drei Bookmarks mit folgenden Serververbindungen (bzw. 1x VNC-Bildschirmzugriff):
smb://172.17.61.12/Public
vnc://admin:verysecret@172.17.61.12
In diesem Fall handelt es sich allerdings "nur" um die Benutzeraccounts für den File-Zugriff einer kleineren Agentur. Wenn die Leute Feierabend machen (und das Büro abgeschlossen wird), bleiben die Rechner sowieso immer eingeschaltet und angemeldet. Falls jemand extra einbricht, um an Daten rumzupfuschen, kann er es dann auch gleich am Rechner selbst machen und braucht keine Passworte, welche schon gar nicht für andere Dienste verwendet werden können.
Erstellt am: 31.05.2017 unter den Kategorien Aufgebohrt . | Kommentieren |