Cómo escapar la contraseña para el montaje smb

1

Quiero montar un recurso compartido SMB con diferentes credenciales de usuario. Por lo tanto quiero usar

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

Sin embargo, este comando falla:

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

Cuando intento pasar la contraseña a través de una variable, obtengo:

$ 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 en otros sistemas parece aceptar el nombre de usuario y la contraseña como opciones de montaje, como:

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

o mediante un archivo de credenciales:

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

Sin embargo, ambas formas no están disponibles con el montaje 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

Entonces la pregunta es: ¿Cómo proporcionar la contraseña a mount_smbfs de macOS? Soy consciente de que cambiar la contraseña resolvería el problema, pero por razones no es una opción.

    
pregunta PVitt 05.07.2018 - 12:59

3 respuestas

0

Incluso al escapar de los caracteres relevantes de bash ( < en el ejemplo) a través de \ o pasar la contraseña a través de una variable como

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

mount no puede analizar la url debido al hecho de que < También es un carácter especial para las URL:

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

Por lo tanto, también necesitamos escapar del carácter < para las URL, que es %3C , para que pass=\<word se convierta en pass=%3Cword .

Consulte Stackoverflow para obtener información adicional, y a lista de caracteres codificados en url .

    
respondido por el PVitt 10.07.2018 - 10:38
2

Ligeramente fuera de lugar, pero tal vez sea útil si desea mantener credenciales con caracteres especiales en una variable de Shell. Con respecto a tus comandos de bash, te indicaré varios temas:

  1. PWD es una variable ENV siempre presente que muestra el funcionamiento actual Directorio (Imprimir Directorio de trabajo). Omita el uso de ese nombre para una variable PassWorD :-).
  2. Hay una diferencia significativa en el uso de comillas dobles y simples citas. Las comillas dobles abarcan una cadena, que también puede contener nombres de variables expandibles y siempre está sujeta a problemas de escape. Las comillas simples definen una cadena de arreglos y serán tratadas como tales, por ejemplo. no se realizará ninguna expansión variable.

Ejemplo:

# 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. Finalmente: trate los nombres de las variables en expansión que se distinguen del texto habitual, como hacer referencia a ${variablename} . (Estilo Bourne Shell)
  2. Intente open 'smb://username:password@server/share' : crea el volumen para usted. Si omite la contraseña, Finder se la pedirá.
respondido por el Garex 10.07.2018 - 12:08
0

Mi intuición es que no quieres complicar las cosas estableciendo una variable y quieres escapar de cada puntuación con el carácter.

El < va a ser super problemático para bash

Lo siguiente que podrías intentar es citar la cadena de argumento problemática con comillas simples, pero he tenido mejor suerte con la barra diagonal que escapa los caracteres del comando en bash individualmente.

Así que si quieres que bash vea esto:

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

necesitas escribir esto:

mount -o nodev,nosuid -t smbfs //user:pass=\<word@host/share /mnt/share
    
respondido por el bmike 09.07.2018 - 15:44

Lea otras preguntas en las etiquetas