File host per pengguna

16

Apakah ada cara untuk mendefinisikan alias host (seperti dalam /etc/hosts) pada basis per pengguna, yaitu dalam file /home/user/.hosts?

Tujuan utama saya adalah dengan mudah berbagi alias host melalui rsync antara mesin-mesin di lan kecil saya. Karena tidak ada mesin yang akan selalu terkoneksi secara andal, server DNS bukanlah suatu opsi (kan?).

Terima kasih.

mrucci
sumber
2
Oh wow. Saya hendak memposting pertanyaan yang sama, tapi saya melihat Anda punya. Masuk akal bagi saya, tetapi anehnya itu tidak ada di Linux. Dalam kasus saya, saya memiliki bentuk Linux yang dipenjara dengan OS Android pada perangkat Samsung Galaxy Tab saya, dan karena pengembangan web saya, saya sering perlu mengedit / etc / hosts. Di Linux yang dipenjara, Anda tidak dapat mengedit / etc / hosts. Jadi, a ~ / .hosts akan sangat keren untuk dimiliki, pasti!
ServerChecker
Apakah Anda menemukan solusi pada akhirnya?
quamis
Sayangnya tidak. Mungkin itu tidak mungkin karena itu merupakan ancaman keamanan.
mrucci
1
Untuk SSH, Anda dapat menggunakan alias sebagai solusi parsial. Masukkan alias ssh="ssh ".bashrc Anda (perhatikan spasi spasi di akhir alias) bersama dengan alias myhost="[email protected]"dan kemudian Anda bisa mengatakan ssh myhostdan itu akan berhasil.
Noah Sussman
Pendekatan yang lebih baik untuk penyelesaiannya adalah dengan memasukkan entri di ~/.ssh/configtempat Anda menambahkan baris: Host my-hostdan Hostname 10.0.0.xxx<- IP mesin. Yang menyenangkan adalah itu juga memungkinkan Anda untuk menentukan nama pengguna, port, kunci mana yang digunakan dll
Ciprian Tomoiagă

Jawaban:

8

Solusi yang lebih baik adalah menginstal Avahi dan libnss-mdns, dan kemudian menggunakan HOSTNAME.localalamat.

Nama-nama ini tidak akan per-pengguna, tetapi akan memecahkan tujuan Anda yang dinyatakan memiliki nama-nama umum untuk semua mesin di LAN.

Teddy
sumber
Apakah ada cara untuk menentukan HOSTNAMES.local di file lokal (per-pengguna) daripada di / etc / avahi / hosts?
mrucci
Saya pikir Teddy berarti bahwa setiap mesin akan memiliki nama yang akan ditemukan Avahi. Haruskah pemetaan mesin-ke-nama benar-benar bervariasi berdasarkan per pengguna?
pjc50
tidak, itu tidak boleh bervariasi berdasarkan per pengguna. Saya hanya perlu metode untuk berbagi alias host (dengan cara yang memungkinkan saya melakukannya ping hostnameAlias) tanpa hak akses root. Avahi hampir melakukan pekerjaan yang benar, karena saya dapat menggunakan mesin $ HOSTNAME sebagai alias. Hanya untuk rasa ingin tahu: di mana pemetaan ini dilakukan?
mrucci
3

Lihat https://github.com/figiel/hosts untuk mengetahui cara melakukan persis apa yang Anda minta.

Itu adalah perpustakaan kecil, dimuat melalui LD_PRELOAD dan yang menimpa gethostbyname () dan beberapa fungsi terkait yang digunakan program untuk resolusi DNS. Ini bekerja dengan baik untuk saya. Satu-satunya peringatan yang saya temukan adalah bahwa browser web Chrome tidak menggunakan resolusi DNS asli, tetapi malah mengimplementasikan klien DNS-nya sendiri. Untuk mengatasi masalah itu, Anda perlu menonaktifkan klien DNS Chrome .

Boris Bukh
sumber
2

Implementasi Linux glibc tidak dapat melakukan itu.

Tapi Anda bisa memperluasnya dengan perpustakaan nss yang bisa. Ini akan mudah untuk ditulis karena Anda dapat merobek bagian relevan dari libc yang ada di direktori nss_files di

http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.bz2

Contohnya

Namun, ini akan menjadi hal yang agak tidak aneh untuk dilakukan.

MarkR
sumber
0

Seperti dijelaskan oleh jawaban lain di halaman ini, ada beberapa cara untuk mencapai fungsi serupa, tetapi:

Tidak, tidak ada file "per-pengguna" seperti /etc/hostsatau cara lain untuk mengesampingkan resolusi nama default sebagai pengguna yang tidak memiliki hak istimewa di GNU / Linux.

Daveloyall
sumber
-1

Tampaknya jauh lebih mudah untuk menulis skrip yang mengetahui host mana yang aktif, dan kemudian menetapkan nama host untuk perintah rsync berikut. Sesuatu seperti ini

#! / usr / bin / sh

HOST = "tidak ada"
TESTFILE = / tmp / testfile. $$
sentuh $ TESTFILE
untuk saya di hosta hostb hostc olivia
melakukan
    scp $ TESTFILE $ i: / tmp
    jika [$? -eq 0]
    kemudian
        HOST = $ i
    fi
selesai
rm $ TESTFILE

if [$ HOST! = "none"]
kemudian
    echo $ HOST sudah habis
    rsync -av --rsh = ssh file $ HOST: / dest
lain
    echo "Tidak ada host yang ditemukan"
    keluar 1
fi

Ini belum diuji, dan memiliki asumsi, jadi Anda harus memodifikasinya agar sesuai.

gorila
sumber
Terima kasih atas jawabannya tetapi saya mencoba untuk menyelesaikan masalah lain: bagaimana cara menyimpan dan berbagi daftar nama host (hosta hostb hostc olivia) di folder home user, sehingga saya dapat menulisrsync src olivia:/dst
mrucci