2 votes

Comment échapper au mot de passe pour le montage smb

Je veux monter un partage SMB avec différentes informations d'identification de l'utilisateur. Je veux donc utiliser

mount -o nodev,nosuid -t smbfs //user:pass=<word@host/share /mnt/share

Cependant, cette commande échoue :

-bash: word@host/share: No such file or directory

Lorsque j'essaie de transmettre le mot de passe via une variable, j'obtiens :

$ 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 sur d'autres systèmes semble accepter le nom d'utilisateur et le mot de passe comme options de montage, comme :

$ mount -o nodev,nosuid,domain=mydomain,username=user,password="pass=<word" -t smbfs //host/share /mnt/share 

ou via un fichier d'informations d'identification :

$ cat credentials.txt
username=user
password=pass=<word
domain=mydomain
$ mount -o nodev,nosuid,credentials=./credentials.txt -t smbfs //host/share /mnt/share 

Cependant, ces deux méthodes ne sont pas disponibles avec le montage de MacOS :

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

La question est donc la suivante : comment fournir le mot de passe à mount_smbfs de MacOS ? Je suis conscient que changer le mot de passe résoudrait le problème, mais pour des raisons, ce n'est pas une option.

2voto

Martin Allert Points 898

Légèrement hors sujet, mais peut-être utile si vous voulez vous en tenir à mettre les informations d'identification avec des caractères spéciaux dans une variable Shell. En ce qui concerne vos commandes bash, je vais vous indiquer plusieurs sujets :

  1. PWD est une variable ENV toujours présente qui indique le répertoire de travail actuel. de travail actuel (Print Working Directory). N'utilisez pas ce nom pour une variable PassWorD :-).
  2. Il y a une différence significative entre l'utilisation de guillemets doubles et simples. simples. Les guillemets doubles englobent une chaîne de caractères, qui peut également contenir des noms de variables extensibles et qui est toujours sujette à des problèmes d'échappement. Les guillemets simples définissent une chaîne fixe et seront traités comme tels, c'est-à-dire qu'aucune expansion de variable ne sera effectuée.

Exemple :

# 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
  1. Enfin, traitez les noms de variables dans une expansion qui se distingue du texte habituel, par exemple en vous référant à ${variablename} . (style Bourne Shell)
  2. Essayez open 'smb://username:password@server/share' - il crée le montage du volume pour vous. Si vous omettez le mot de passe, le Finder vous le demandera.

0voto

Oskar Points 1242

Mon intuition me dit que vous ne voulez pas compliquer les choses en définissant une variable et que vous voulez échapper à chaque ponctuation avec le caractère \.

Le < va être super problématique pour bash

La prochaine chose que vous pourriez essayer est de citer la chaîne d'arguments problématique avec des guillemets simples, mais j'ai eu plus de chance avec le back slash qui permet d'échapper les caractères de commande dans bash individuellement.

Donc si vous voulez que Bash voit ça :

mount -o nodev,nosuid -t smbfs //user:pass=<word@host/share /mnt/share

tu dois taper ça :

mount -o nodev,nosuid -t smbfs //user:pass=\<word@host/share /mnt/share

0voto

PVitt Points 199

Même en échappant les caractères pertinents pour bash ( < dans l'exemple) via \ ou en passant le mot de passe via une variable comme

$ export PASSWORD="pass=<word"
$ mount -o nodev,nosuid -t smbfs //user:${PASSWORD}@host/share /mnt/share

mount ne parvient pas à analyser l'URL car < est également un caractère spécial pour les URL :

mount_smbfs: URL parsing failed, please correct the URL and try again: Invalid argument

Nous devons donc également échapper à la < pour les URL, qui est %3C de sorte que pass=\<word devient pass=%3Cword .

Voir Stackoverflow pour des informations supplémentaires, et un liste des caractères encodés de l'url .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X