Was ist der zuverlässige Weg, um das .ssh-Verzeichnis jedes Benutzers von bash abzurufen?

8

Ich kann das / etc / passwd mit augtool analysieren:

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

... aber es scheint ein bisschen zu verworren.

Gibt es ein einfaches, dediziertes Tool zum Anzeigen des Benutzerhauses (wie usermodes zum Ändern verwendet werden kann)?

Adam Ryczkowski
quelle
Suchen Sie eine Marionettenantwort?
mgjk
@mgjk Nein, ich weiß, wie man es mit Puppen macht. Tatsächlich brauche ich diese Antwort, um ein Bootstrapping-Skript zu schreiben, das einen Puppenspieler auf einem LXC-Container
einrichtet

Antworten:

15

Sie sollten niemals /etc/passwddirekt analysieren . Möglicherweise befinden Sie sich auf einem System mit Remotebenutzern. In diesem Fall befinden sie sich nicht in einem System /etc/passwd. Die /etc/passwdDatei befindet sich möglicherweise woanders. Usw.

Wenn Sie direkten Zugriff auf die Benutzerdatenbank benötigen, verwenden Sie getent.

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

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

Es gibt jedoch auch einen anderen Weg, bei dem keine Analyse durchgeführt wird:

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

Der ~Operator in der Shell wird in das Ausgangsverzeichnis des angegebenen Benutzers erweitert. Wir müssen jedoch die verwenden, evalda die Erweiterung der Variablen $usernach der Erweiterung von erfolgt ~. Wenn Sie also die evalAnführungszeichen und doppelte Anführungszeichen verwenden, erweitern Sie effektiv $userzuerst und rufen dann auf eval echo "~phemmer".

Sobald Sie das Home-Verzeichnis haben, gehen Sie einfach /.sshbis zum Ende.

$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh
Patrick
quelle
Tolle Antwort mit all dem Polieren, das die awkMagie beinhaltet (die ich nie wirklich verstanden habe)
Adam Ryczkowski
1
Ist es immer sicher anzunehmen, dass der sshdir sein wird ~/.ssh? Kann das durch eine Konfigurationseinstellung irgendwo geändert werden oder ist es fest in ssh codiert?
Terdon
2
Dies ist eine Standardeinstellung, die in /etc/ssh/ssh_configund geändert werden kann sshd_config. Zumindest auf Ubuntu 14.04
Adam Ryczkowski
4

Sie suchen nach $ myusers Home Dir?

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

Sie können verwenden

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

.ssh dir.

Archemar
quelle