Apa cara andal untuk mendapatkan direktori .ssh setiap pengguna dari bash?

8

Saya dapat menguraikan / etc / passwd dengan augtool:

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

... tapi sepertinya agak terlalu berbelit-belit.

Apakah ada alat sederhana dan berdedikasi untuk menampilkan rumah pengguna (seperti usermoddapat digunakan untuk mengubahnya )?

Adam Ryczkowski
sumber
Apakah Anda mencari jawaban boneka?
mgjk
@mgjk Tidak, saya tahu bagaimana melakukannya dengan boneka. Sebenarnya saya perlu jawaban ini untuk menulis skrip bootstrap yang mengatur puppetmaster pada wadah LXC :-)
Adam Ryczkowski

Jawaban:

15

Anda tidak boleh mengurai /etc/passwdsecara langsung. Anda mungkin berada di sistem dengan pengguna jarak jauh, dalam hal ini mereka tidak akan masuk /etc/passwd. The /etc/passwdFile mungkin berada di tempat lain. Dll

Jika Anda memerlukan akses langsung ke basis data pengguna, gunakan getent.

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

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

Namun ada juga cara lain yang tidak melibatkan penguraian:

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

The ~operator dalam shell mengembang ke direktori home user tertentu ini. Namun kita harus menggunakan evalkarena perluasan variabel $userterjadi setelah ekspansi ~. Jadi dengan menggunakan evaltanda kutip ganda, Anda secara efektif memperluas $userpertama, lalu menelepon eval echo "~phemmer".

Setelah Anda memiliki direktori home, tempel sederhana /.sshhingga akhir.

$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh
Patrick
sumber
Jawaban yang bagus dengan semua pemolesan yang mencakup awkkeajaiban (yang saya tidak pernah benar-benar mengerti)
Adam Ryczkowski
1
Apakah selalu aman untuk mengasumsikan bahwa sshdir akan menjadi ~/.ssh? Apakah itu dapat diubah dengan pengaturan konfigurasi di mana saja atau apakah hardcoded ke ssh?
terdon
2
Ini adalah default, yang dapat diubah di /etc/ssh/ssh_configdan sshd_config; setidaknya di Ubuntu 14,04
Adam Ryczkowski
4

Anda mencari dir home $ myuser?

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

kamu bisa menggunakan

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

untuk mendapatkan .ssh dir.

Archemar
sumber