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)?


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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.