Archivo de hosts por usuario

16

¿Hay alguna forma de definir alias de host (como en /etc/hosts) por usuario, es decir, en un archivo /home/user/.hosts?

Mi objetivo principal es compartir fácilmente alias de host a través de rsync entre las máquinas en mi pequeño lan. Como no hay una máquina que siempre esté conectada de manera confiable, un servidor DNS no es una opción (¿verdad?).

Gracias.

mrucci
fuente
2
Oh wow. Estaba a punto de publicar esta misma pregunta, pero veo que sí. Tiene sentido para mí, pero extrañamente no existe en Linux. En mi caso, tengo una forma encarcelada de Linux con sistema operativo Android en mi dispositivo Samsung Galaxy Tab, y debido a mi desarrollo web a menudo necesito editar / etc / hosts. En un Linux encarcelado, no puede editar / etc / hosts. Por lo tanto, un ~ / .hosts sería realmente genial tener, ¡definitivamente!
ServerChecker
¿Encontraste alguna solución al final?
quamis
Lamentablemente no. Quizás no sea posible porque es una amenaza para la seguridad.
mrucci
1
Para SSH, puede usar alias como una solución parcial. Ponga alias ssh="ssh "su .bashrc (observe el espacio en blanco al final del alias) junto con alias myhost="[email protected]"y luego puede decir ssh myhosty funcionará.
Noah Sussman
Un mejor enfoque para la solución alternativa sería colocar una entrada en su lugar ~/.ssh/configdonde agrega las líneas: Host my-hosty Hostname 10.0.0.xxx<- IP de la máquina. Lo bueno es que también te permite especificar el nombre de usuario, el puerto, qué clave usar, etc.
Ciprian Tomoiagă

Respuestas:

8

Una mejor solución sería instalar Avahi y libnss-mdns, y luego usar HOSTNAME.localdirecciones.

Estos nombres no serían por usuario, pero resolverían su objetivo declarado de tener nombres comunes para todas las máquinas a través de una LAN.

Osito de peluche
fuente
¿Hay alguna manera de especificar HOSTNAMES.local en un archivo local (por usuario) en lugar de en / etc / avahi / hosts?
mrucci el
Creo que Teddy significa que cada máquina tendría un nombre que Avahi descubriría. ¿Debería la asignación de máquina a nombre realmente variar según el usuario?
pjc50 el
no, no debe variar según el usuario. Solo necesito un método para compartir alias de host (de una manera que me permita hacerlo ping hostnameAlias) sin privilegios de root. Avahi casi hace el trabajo correcto, porque puedo usar la máquina $ HOSTNAME como un alias. Solo por curiosidad: ¿dónde se realiza este mapeo?
mrucci 01 de
3

Consulte https://github.com/figiel/hosts para ver cómo hacer exactamente lo que le pide.

Es una biblioteca pequeña, cargada a través de LD_PRELOAD y que anula gethostbyname () y varias funciones relacionadas que los programas usan para la resolución de DNS. Funciona bien para mi La única advertencia que encontré es que el navegador web Chrome no usa resolución DNS nativa, sino que implementa su propio cliente DNS. Para resolver ese problema, debe deshabilitar el cliente DNS de Chrome .

Boris Bukh
fuente
2

La implementación de Linux glibc no puede hacer eso.

Pero podría extenderlo con una biblioteca nss que podría. Esto sería fácil de escribir, ya que podría estafar la parte relevante de libc que está en el directorio nss_files en

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

Por ejemplo

Sin embargo, esto sería una cosa no estándar bastante extraña.

MarkR
fuente
0

Como describen las otras respuestas en esta página, hay formas de lograr una funcionalidad similar, pero:

No, no existe un archivo "por usuario" como /etc/hostso cualquier otra forma de anular la resolución de nombre predeterminada como usuario no privilegiado en GNU / Linux.

daveloyall
fuente
-1

Parecería mucho más fácil escribir un script que determine qué hosts están activos y luego establezca el nombre de host para el siguiente comando rsync. Algo como esto

#! / usr / bin / sh

HOST = "ninguno"
TESTFILE = / tmp / testfile. $$
toque $ TESTFILE
para yo en hosta hostb hostc olivia
hacer
    scp $ TESTFILE $ i: / tmp
    si [$? -eq 0]
    luego
        HOST = $ i
    fi
hecho
rm $ TESTFILE

if [$ HOST! = "none"]
luego
    echo $ HOST está arriba
    rsync -av --rsh = archivos ssh $ HOST: / dest
más
    echo "No se encontró host"
    salida 1
fi

Esto no se ha probado y tiene suposiciones, por lo que deberá modificarlo para adaptarlo.

gorila
fuente
Gracias por la respuesta, pero yo estaba tratando de resolver otro problema: cómo almacenar y compartir la lista de nombres de host (hosta hostb hostc Olivia) en una carpeta de inicio del usuario, de modo que puedo escribirrsync src olivia:/dst
mrucci