Wie bringt man eine Cisco VPN-Verbindung dazu, sich ihr Passwort zu merken?

Das Problem

Ich habe eine Cisco IPSEC VPN-Verbindung in meinen Netzwerkeinstellungen auf einem Yosemite-Computer. Es funktioniert gut, abgesehen davon, dass bei jeder einzelnen Verbindung ein Passwort angefordert wird. Das gespeicherte Passwort wird vollständig ignoriert.

Hintergrund

Wenn ich das Passwort unter den Netzwerkeinstellungen eingebe und auf Verbinden klicke, verschwindet das gespeicherte Passwort und es erscheint der Dialog, der nach einem Passwort fragt. Ich habe überprüft, ob das Passwort korrekt ist (es wurde aus einem Dokument kopiert und eingefügt).

Dinge, die nicht funktioniert haben

  • Eine vorgeschlagene Lösung für Snow Leopard bestand darin, das Kennwort zu speichern, den Schlüsselbund zu öffnen, den „Xauth“-Schlüssel im Systemschlüsselbund zu suchen und /usr/libexec/configdZugriff auf den Schlüssel zu gewähren. Dies hatte keine Auswirkung.

  • Übliche Berechtigungsreparatur/Datenträgerüberprüfung

Komisches Zeug

Wenn ich den Schlüsselbundzugriff beobachte, während ich auf die Schaltfläche „Verbinden“ drücke, verschwindet das gespeicherte Passwort direkt aus dem Schlüsselbund, sobald der Dialog erscheint.

Allgemeine Frage

Wie kann ich das Passwort korrekt speichern, damit ich es nicht bei jeder Verbindung erneut eingeben muss?

hmm. Ich bekomme auch seltsame Authentifizierungsprobleme auf Yosemite, besonders im Netzwerkdialog. Würde mich nicht wundern, wenn ein Bug dabei ist.
Sind Sie sicher, dass es nicht von Remote-VPN-Richtlinien abhängt (die jetzt das Speichern von Passwörtern ermöglichen)?
Das würde erklären, warum es direkt aus dem Schlüsselbund verschwindet, wenn es explizit gespeichert wird. Wir müssen uns mit den Netzwerkadministratoren unterhalten!

Antworten (5)

Ich vermute, Sie verwenden Anyconnect, um eine Verbindung zum Cisco VPN-Server herzustellen. AnyConnect kann auch vom Terminal aus verwendet werden. Dies funktioniert unter macOS Sierra und AnyConnect 3.1.14018. Erstellen Sie ein Bash-Skript mit dem folgenden Befehl:

/opt/cisco/anyconnect/bin/vpn connect your-vpn.server.here -s <.credentials

Und fügen Sie die Anmeldedaten in die Datei .credentials mit den folgenden drei Zeilen ein:

0
your-username
your-password

Vergessen Sie nicht, den Dateien angemessene Berechtigungen zuzuweisen.

Der Benutzer gibt an: "Ich habe eine Cisco IPSEC VPN-Verbindung in meinen Netzwerkeinstellungen auf einem Yosemite-Computer". Diese Wortwahl ließ mich mit ziemlich hoher Sicherheit zu dem Schluss kommen, dass sie die integrierte VPN-Lösung in den Systemeinstellungen/Netzwerk/+ verwenden
Können Sie diese Datei irgendwie mit den verschlüsselten Benutzernamen und/oder Passwörtern weitergeben? wie mit der Passwortdatei unter Linux

Wenn ich Ihre Frage lese, habe ich den Eindruck, dass Sie alles richtig machen und der Cisco VPN-Server die Option hat, das Speichern von Kennwörtern auf der Clientseite zuzulassen disallow.

Ich weiß mit Sicherheit, dass es eine solche Einstellung gibt.

Es ist immer noch ärgerlich, dass der OS X-Client diese Einstellung zulässt . disallowÄhnlich wie das Kompilieren von okular ohne DRM-Unterstützung, um einen Satz aus einem Peer-Review-Journal zu kopieren, scheint dies eine grundsätzlich benutzerunfreundliche Einstellung zu sein.

Beide Antworten hier, während ich dies schreibe, haben Recht, aber die Existenz der vpnBefehlszeile bedeutet, dass wir dieses benutzerfeindliche Design mit umgehen können expect. Vielen Dank an die vorherigen Antwortenden, GhostLyrics für die Offenlegung der Existenz der serverseitigen Option, die das Speichern von Passwörtern deaktiviert, und Hans für die Offenlegung des vpnBefehlszeilen-Clients.

Erstellen Sie eine Datei, die so aussieht:

#!/usr/bin/expect --
set timeout 10
set addr ""  # VPN Host
set user ""  # Username
set pass ""  # Password (ensure that special characters are escaped)
set group "" # Group NUMBER shown in connect prompt


spawn /opt/cisco/anyconnect/bin/vpn connect $addr
expect "\r\nGroup:*"
send -- "$group\r"
expect "\r\nUsername:*"
send -- "$user\r"
expect "Password: "
send -- "$pass\r"
expect eof

Füllen Sie die setFelder wie gewohnt aus. Wenn Ihr VPN wie meines ist, erhalten Sie eine Liste mit „Gruppen“, wenn Sie die vpn connect. Führen Sie dies einmal von Hand aus und notieren Sie, welche Nummer der Gruppe entspricht, mit der Sie sich verbinden möchten. Es ändert sich nicht zwischen den Läufen, es sei denn, die Administratoren fügen Gruppen hinzu oder entfernen sie. Den Namen können Sie hier nicht verwenden, das Programm erwartet eine Nummer.

Sobald alles ausgefüllt ist, chmod +xdieses Skript und führen Sie es aus. Ich kann mich jetzt freihändig mit meinem VPN verbinden!

Am Ende, hier ist ein Bonus, öffne den blöden Client selbst und sieh dir an, wie du bereits verbunden bist! Nach expect eoftunspawn /usr/bin/open "/Applications/Cisco/Cisco\ AnyConnect\ Secure\ Mobility\ Client.app"

Neben Hans ' Antwort – danke! – wollte ich den Aufruf ein wenig rationalisieren, Terminal umgehen und am Ende mit dem AnyConnect-Symbol im macOS-Statusmenü enden . (Ich bin auf Mojave 10.14.6.)

Starten Sie zuerst Terminal und wechseln Sie dann in das Binärverzeichnis der AnyConnect-Anwendung:

$ cd "/Applications/Cisco/Cisco AnyConnect Secure Mobility Client.app/Contents/MacOS"

Erstellen Sie eine Kopie der ursprünglichen Binärdatei:

$ sudo cp \
"Cisco AnyConnect Secure Mobility Client" \
"Cisco AnyConnect Secure Mobility Client.orig"

Überschreiben Sie schließlich die ursprüngliche Datei mit einem Shell-Skript und ändern VPN hostSie es in Ihren VPN-Hostnamen oder Ihre VPN-Adresse und userund pa$$w0rdin Ihre Anmeldeinformationen:

$ sudo cat > "Cisco AnyConnect Secure Mobility Client" <<'SCRIPT'
#!/bin/sh

# The AnyConnect vpn utility takes some options and commands or else runs
# interactively.
# Its help command shows that -s reads a script from STDIN and that connect
# takes a host as argument.
# Further, the connect command takes the username and password from STDIN; we
# will supply them from a heredoc with the -s option.

/opt/cisco/anyconnect/bin/vpn -s \
connect "VPN host" <<'CREDENTIALS'
user
pa$$w0rd
CREDENTIALS

exec "$0.orig"  # invoke the original app
SCRIPT

Jetzt sollten Sie AnyConnect wie gewohnt über Spotlight oder Finder ausführen können. Zuerst stellt unser Skript eine Verbindung her und übergibt dann die Ausführung an die App-Binärdatei, sodass AnyConnect im Statusmenü des Desktops angezeigt wird.

Toller Mann, Cisco Anny Connect UX ist wie Scheiße.
zukünftige Referenz: verwenden, sudo -iwenn Schreibberechtigung verweigert wird

Die Sicherheit kann erhöht werden, indem die Schlüsselbundverwaltung zum Speichern des Kennworts verwendet wird.

security add-generic-password -s 'vpnpassword'  -a 'user' -w 'password' -T /usr/bin/security

Hier ist die angepasste Version von Christians Idee. Das Entfernen der internen Heredoc-Anführungszeichen ist erforderlich, damit die Parametererweiterung funktioniert.

sudo cat > "Cisco AnyConnect Secure Mobility Client" <<'SCRIPT'
#!/bin/sh

/opt/cisco/anyconnect/bin/vpn -s \
connect "VPN host" <<CREDENTIALS
user
$(security find-generic-password -ws vpnpassword)
CREDENTIALS

exec "$0.orig"  # invoke the original app
SCRIPT