Qual é a maneira confiável de obter o diretório .ssh de cada usuário do bash?

8

Eu posso analisar o / etc / passwd com o augtool:

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

... mas parece um pouco complicado demais.

Existe alguma ferramenta simples e dedicada para exibir a casa dos usuários (como usermod pode ser usada para alterar )?

    
por Adam Ryczkowski 02.10.2014 / 14:41

2 respostas

15

Você nunca deve analisar /etc/passwd diretamente. Você pode estar em um sistema com usuários remotos e, nesse caso, eles não estarão em /etc/passwd . O arquivo /etc/passwd pode estar em outro lugar. Etc.

Se você precisar de acesso direto ao banco de dados do usuário, use getent .

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

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

No entanto, há também outra maneira que não envolve a análise:

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

O operador ~ no shell é expandido para o diretório inicial do usuário especificado. No entanto, temos que usar o eval porque a expansão da variável $user acontece após a expansão de ~ . Então, usando o eval e aspas duplas, você está efetivamente expandindo $user primeiro, depois chamando eval echo "~phemmer" .

Uma vez que você tenha o diretório home, o argumento simples /.ssh até o final.

$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh
    
por 02.10.2014 / 14:55
4

você está procurando o diretório inicial do $ myuser?

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

você pode usar

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

para obter o diretório .ssh

    
por 02.10.2014 / 14:49