
Ich versuche, ein Shell-Skript zu schreiben, das mit der Verbindung zu einer bestimmten SSID beginnt (eine, mit der ich schon einmal verbunden war, ein bevorzugtes Netzwerk). Die einzige Möglichkeit, dies über die Befehlszeile zu tun, scheint folgende zu sein:
networksetup -setairportnetwork en0 "MyAP" "PASSWORD"
Wie kann ich eine Verbindung zum Netzwerk „MyAP“ herstellen, ohne das Kennwort unsicher im Shell-Skript zu speichern?
Antwort1
Es gibtein großartiges Tutorial von Allan Odgaardim Texmate-Blog, in dem beschrieben wird, wie man das Keychain-Dienstprogramm von der Befehlszeile aus verwendet, um (unter anderem) ein Passwort abzurufen. Ich empfehle, es sowie die entsprechenden Kommentare durchzulesen. Sie können eine Funktion erstellen, die allgemein verwendet werden kann, wie z. B.
#!/bin/bash
get_pw () {
security 2>&1 >/dev/null find-generic-password -ga "$1" \
| ruby -e 'print $1 if STDIN.gets =~ /^password: "(.*)"$/'
}
pass=$(get_pw $1)
echo $pass
Damit dies programmgesteuert und ohne Benutzerbestätigung durchgeführt werden kann, müssen Sie der security
Binärdatei (in meiner Installation von 10.11.2 befindet sie sich unter /usr/bin/security
) Zugriff auf das spezifische Passwort gewähren. Dies kann auf zwei Arten erfolgen:
indem Sie Folgendes von einem Terminal aus ausführen
security add-generic-password -a "account name" -s "service name" -T "/usr/bin/security" -U
wie beschrieben von davidacland in seinemJAMFNation-Antwort.Notiz: Ich konnte dies mit einem vorhandenen Schlüsselanhänger nicht reproduzieren (obwohl die Antwort von davidacland nahelegt, dass es möglich ist).
-oder-
- Verwendung derSchlüsselbundzugriff.appGUI zum manuellen Hinzufügen
security
zur Zugriffskontrollliste des Schlüsselbundelements: Schlüsselbundzugriffs-GUI -> Doppelklick auf Schlüsselbundelement -> Zugriffskontrolle
Antwort2
Wenn es das erste verfügbare bevorzugte Netzwerk ist (Netzwerkeinstellungen, Erweitert, "Netzwerke merken, denen dieser Computer beigetreten ist" ist aktiviert) und Sie "Administratorberechtigung erforderlich zum: - Ein- und Ausschalten von WLAN" nicht aktiviert haben, können Sie
networksetup -setairportpower en0 off
gefolgt von „by“
networksetup -setairportpower en0 on
, und es wird eine Verbindung zum ersten verfügbaren bevorzugten Netzwerk hergestellt, ohne dass ein Kennwort erforderlich ist (ausprobiert unter OS X 10.9.4).
Wenn Sie ausführen, networksetup -help
ist die letzte Ausgabezeile
Jeder Befehl, der ein Passwort erfordert, wird akzeptiert – um anzugeben, dass das Passwort von stdin gelesen werden soll.