Come sfuggire alla password per il montaggio smb


1

Voglio montare una condivisione SMB con credenziali utente diverse. Pertanto voglio usare

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

Tuttavia, questo comando non riesce:

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

Quando provo a passare la password tramite una variabile, ottengo:

$ 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 su altri sistemi sembra accettare username e password come opzioni di mount, come:

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

o tramite un file di credenziali:

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

Tuttavia, entrambi i modi non sono disponibili con l'attacco di 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

Quindi la domanda è: come fornire la password a mount_smbfs di macOS? Sono consapevole che la modifica della password risolverebbe il problema, ma per motivi questa non è un'opzione.


Stai passando un operatore di reindirizzamento nel mezzo dell'URI e non stai scappando e non quotando l'URI. Quindi stai istruendo la shell di eseguire un binario chiamato 'share' da una directory chiamata 'word @ host' con '/ mnt / share' come argomento e passalo in una chiamata di mount macellata.
Marc Wilson,

@MarcWilson Questo è esattamente il problema. Da qui la domanda su come evitarlo.
PVitt

Possiamo supporre che la tua shell sia bashe la versione è GNU bash, versione 3.2.57 (1) -release (x86_64-apple-darwin18)
bmike

@bmike Sì, è corretto, anche se è darwin17, non darwin18.
PVitt,

Risposte:


2

Leggermente offtopico, ma forse utile se si desidera attenersi a inserire credenziali con caratteri speciali in una variabile Shell. Per quanto riguarda i tuoi comandi bash ti indicherò diversi argomenti:

  1. PWD è una variabile ENV sempre presente che mostra la directory di lavoro corrente (Print Working Directory). Ometti usando quel nome per una variabile PassWorD :-).
  2. Vi è una differenza significativa nell'uso di virgolette doppie e virgolette singole. Le virgolette doppie abbracciano una stringa, che può contenere anche nomi di variabili espandibili ed è sempre soggetta a problemi di escape. Le virgolette singole definiscono una stringa fissa e verranno trattate come tali, ad es. Non verrà eseguita alcuna espansione variabile.

Esempio:

# 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. Infine, tratta i nomi delle variabili in espansione distinguibili dal solito testo come fare riferimento a ${variablename}. (Stile Bourne Shell)
  2. Prova open 'smb://username:password@server/share': crea il volume mount per te. Se ometti la password, Finder ti chiederà.

L'opzione 4 è il modo pragmatico per farlo funzionare senza fare affidamento sul modo maturo e sicuro di inserire la password richiesta nel portachiavi e recuperarla come necessario. Quell'ultimo oggetto avrà molto apprendimento (radendo davvero lo yak), ma sarà molto potente una volta che qualcuno avrà una serie di script e strumenti che capirà per scrivere sul portachiavi da bash e poi leggere da esso da bash.
bmike

Ma l'opzione 4 non funzionerà poiché la condivisione deve essere montata durante l'avvio e la password non è nota all'utente. Tuttavia, memorizzarlo nel portachiavi sarebbe il modo preferito.
PVitt,

Tuttavia, grazie per i suggerimenti. Nel vivo della battaglia ho usato PWD senza pensare al suo uso comune. Anche le altre cose sono piuttosto interessanti. Non lo sapevo ancora.
PVitt,

Sei il benvenuto, sempre felice di aiutarti. :-)
Garex,

0

La mia sensazione è che non vuoi complicare le cose impostando una variabile e vuoi sfuggire a ogni punteggiatura con il carattere \.

<Sarà super problematico per bash

La prossima cosa che potresti provare è citare la stringa di argomenti problematici con virgolette singole, ma ho avuto più fortuna con la barra rovesciata che sfugge ai caratteri di comando in bash individualmente.

Quindi se vuoi bash per vedere questo:

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

è necessario digitare questo:

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

Esiste un comando per uscire automaticamente dalle stringhe?
JBis

@JBis Non sei sicuro di ottenere quale fuga automatica sarebbe? Il carattere <è definito come un operatore con priorità alta in bash, quindi reindirizza il comando mount -o nodev,nosuid -t smbfs //user:pass=a un file chiamato word@host/sharecon alcune altre cose attaccate. Stai chiedendo se c'è un comando per sottolineare tutti i personaggi che sono operatori in bash?
bmike

Mettere un "\" davanti <dovrebbe farlo leggere come un personaggio e non come un operatore.
JBis

Grazie per la risposta. Sono anche interessato al modo complicato con le variabili, non solo, ma anche perché \<aiuta solo a evitare l'errore bash. Ora è mount_smbfs:, URL parsing failed, please correct the URL and try again: Invalid argumentche è lo stesso errore di quando si passa la password tramite una variabile.
PVitt,

Ciao @PVitt Potresti avere più fortuna a pubblicare una domanda completamente nuova che mostra l'unico comando con il nuovo errore. Potrebbe essere difficile modificare la domanda corrente e ripetere la ricezione di nuove risposte o la modifica delle risposte esistenti se hai superato il set iniziale di errori con una \ fuga da quella<
bmike

0

Anche quando si sfugge ai caratteri rilevanti di bash ( <nell'esempio) tramite \ o si passa la password tramite una variabile come

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

mount non riesce a analizzare l'URL a causa del fatto che <è anche un carattere speciale per gli URL:

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

Quindi dobbiamo anche sfuggire al <carattere per gli URL, che è %3C, così pass=\<worddiventa pass=%3Cword.

Vedi Stackoverflow per ulteriori informazioni e un elenco di caratteri codificati URL .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.