Qual è il modo affidabile per ottenere la directory .ssh di ogni utente da bash?


8

Posso analizzare / etc / passwd con augtool:

myuser=bob
usershome=`augtool -L -A --transform "Passwd incl /etc/passwd" print "/files/etc/passwd/$myuser/home" | sed -En 's/\/.* = (.*)/\1/p'`

... ma sembra un po 'troppo contorto.

Esiste uno strumento semplice e dedicato per visualizzare la casa degli utenti (come usermodpuò essere usato per cambiarlo )?


Stai cercando una risposta fantoccio?
mgjk,

@mgjk No, so come farlo con le marionette. In effetti ho bisogno di questa risposta per scrivere uno script bootstrap che imposta un burattinaio su un contenitore LXC :-)
Adam Ryczkowski

Risposte:


15

Non dovresti mai analizzare /etc/passwddirettamente. Potresti essere su un sistema con utenti remoti, nel qual caso non saranno presenti /etc/passwd. Il /etc/passwdfile potrebbe essere altrove. Eccetera.

Se è necessario l'accesso diretto al database utente, utilizzare getent.

$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh

$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer

Tuttavia esiste anche un altro modo che non comporta l'analisi:

$ user=phemmer
$ eval echo "~$user"
/home/phemmer

L' ~operatore nella shell si espande nella home directory dell'utente specificato. Comunque dobbiamo usare il evalperché l'espansione della variabile $useravviene dopo l'espansione di ~. Quindi, usando le evalvirgolette doppie e, si sta effettivamente espandendo $userprima, quindi chiamando eval echo "~phemmer".

Una volta che hai la home directory, aggrappati /.sshalla fine.

$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh

Ottima risposta con tutta la lucidatura che include la awkmagia (che non ho mai veramente capito)
Adam Ryczkowski,

1
È sempre sicuro supporre che lo sarà sshdir ~/.ssh? Può essere modificato da un'impostazione di configurazione ovunque o è hardcoded in ssh?
terdon

2
È un valore predefinito, che può essere modificato in /etc/ssh/ssh_confige sshd_config; almeno su Ubuntu 14.04
Adam Ryczkowski il

4

stai cercando la directory home di $ myuser?

 awk -F: -v user=$myuser '$1==user { print $6 ;}' /etc/passwd

Puoi usare

 awk -F: -v user=$myuser '$1==user { printf "%s/.ssh\n",$6;}' /etc/passwd

per ottenere .ssh dir.

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.