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


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.