Ich möchte eine SMB-Freigabe mit unterschiedlichen Benutzeranmeldeinformationen bereitstellen. Daher möchte ich verwenden
mount -o nodev,nosuid -t smbfs //user:pass=<word@host/share /mnt/share
Dieser Befehl schlägt jedoch fehl:
-bash: word@host/share: No such file or directory
Wenn ich versuche, das Passwort über eine Variable zu übergeben, bekomme ich:
$ export PWD="pass=<word"
$ mount -o nodev,nosuid -t smbfs //user:$PWD@host/share /mnt/share
mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument
mount
auf anderen Systemen scheint Benutzername und Passwort als Mount-Optionen zu akzeptieren, wie:
$ mount -o nodev,nosuid,domain=mydomain,username=user,password="pass=<word" -t smbfs //host/share /mnt/share
oder über eine Credentials-Datei:
$ cat credentials.txt
username=user
password=pass=<word
domain=mydomain
$ mount -o nodev,nosuid,credentials=./credentials.txt -t smbfs //host/share /mnt/share
Beide Möglichkeiten sind jedoch mit dem Mount von macOS nicht verfügbar:
mount_smbfs: -o credentials: option not supported
mount_smbfs: -o domain: option not supported
mount_smbfs: -o username: option not supported
mount_smbfs: -o password: option not supported
Die Frage ist also: Wie gebe ich das Passwort für macOS 'mount_smbfs an? Mir ist bewusst, dass das Ändern des Passworts das Problem lösen würde, aber aus Gründen ist dies keine Option.
Etwas offtopic, aber vielleicht nützlich, wenn Sie Anmeldeinformationen mit Sonderzeichen in eine Shell-Variable einfügen möchten. In Bezug auf Ihre Bash-Befehle werde ich Sie auf mehrere Themen hinweisen:
Beispiel:
# fix string
tatooine-2257:~ mallert$ export P='<word'
tatooine-2257:~ mallert$ echo $P
<word
# no variable expansion
tatooine-2257:~ mallert$ export P='<word $PWD'
tatooine-2257:~ mallert$ echo $P
<word $PWD
tatooine-2257:tmp mallert$ echo $PWD
/tmp
${variablename}
. (Bourne Shell-Stil)open 'smb://username:password@server/share'
- es erstellt das Volume-Mount für Sie. Wenn Sie das Passwort weglassen, wird Finder Sie danach fragen.Mein Bauchgefühl ist, dass Sie die Dinge nicht komplizieren wollen, indem Sie eine Variable setzen, und Sie möchten jeder Interpunktion mit dem Zeichen \ entkommen.
Das < wird für Bash super problematisch sein
Das nächste, was Sie versuchen könnten, ist, die problematische Argumentzeichenfolge mit einfachen Anführungszeichen zu zitieren, aber ich hatte mehr Glück mit dem Backslash, der Befehlszeichen in Bash einzeln maskiert.
Wenn Sie also möchten, dass bash dies sieht:
mount -o nodev,nosuid -t smbfs //user:pass=<word@host/share /mnt/share
Sie müssen Folgendes eingeben:
mount -o nodev,nosuid -t smbfs //user:pass=\<word@host/share /mnt/share
mount -o nodev,nosuid -t smbfs //user:pass=
an eine Datei umleitet, word@host/share
die mit etwas anderem angehängt ist. Fragen Sie, ob es einen Befehl gibt, um auf alle Zeichen hinzuweisen, die Operatoren in Bash sind?<
sollte es als Zeichen und nicht als Operator gelesen werden.\<
nur hilft, den Bash-Fehler zu vermeiden. Jetzt ist es mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument
, was der gleiche Fehler ist wie beim Übergeben des Passworts über eine Variable.\
Es kann schwierig sein, die aktuelle Frage zu bearbeiten und wiederholt neue Antworten zu erhalten oder die vorhandenen Antworten zu bearbeiten, wenn Sie die anfängliche Reihe von Fehlern mit einem Escapezeichen hinter sich gelassen haben<
Auch beim Maskieren der bash-relevanten Zeichen ( <
im Beispiel) über \ oder der Übergabe des Passworts über eine Variable wie
$ export PASSWORD="pass=<word"
$ mount -o nodev,nosuid -t smbfs //user:${PASSWORD}@host/share /mnt/share
mount kann die URL nicht analysieren, da < auch ein Sonderzeichen für URLs ist:
mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument
Also müssen wir auch das <
Zeichen für URLs maskieren, das ist %3C
, damit es pass=\<word
zu wird pass=%3Cword
.
Weitere Informationen und eine Liste der URL-codierten Zeichen finden Sie unter Stackoverflow .
Marc Wilson
PVitt
Fahrrad
bash
und die Version GNU bash ist, Version 3.2.57(1)-release (x86_64-apple-darwin18)PVitt