Uma solução melhor seria instalar Avahi e libnss-mdns e, em seguida, usar HOSTNAME.local
endereços.
Esses nomes não seriam por usuário, mas resolveriam seu objetivo declarado de ter nomes comuns para todas as máquinas em uma LAN.
Existe uma maneira de definir aliases de host (como em /etc/hosts
) por usuário, ou seja, em um arquivo /home/user/.hosts
?
Meu principal objetivo é compartilhar facilmente aliases de host via rsync entre as máquinas na minha pequena lan. Como não há máquina que seja sempre conectada de forma confiável, um servidor DNS não é uma opção (certo?).
Obrigado.
A implementação do glibc no Linux não pode fazer isso.
Mas você poderia estendê-lo com uma biblioteca nss que poderia. Isso seria fácil de escrever, já que você poderia arrancar a parte relevante da libc que está no diretório nss_files em
Por exemplo
Isso, no entanto, seria uma coisa bastante estranha e fora do padrão.
Veja link para obter uma maneira de fazer exatamente o que você deseja.
Essa é uma biblioteca pequena, carregada via LD_PRELOAD e que substitui gethostbyname () e várias funções relacionadas que os programas usam para resolução de DNS. Isso funciona bem para mim. A única ressalva que descobri é que o navegador da Web Chrome não usa resolução nativa de DNS, mas implementa seu próprio cliente DNS. Para resolver esse problema, você precisa desativar o cliente DNS do Chrome .
Se você tivesse duas máquinas que ficariam funcionando a maior parte do tempo, você poderia se levantar em BIND em cada uma delas e torná-las os servidores DNS ... ou obter um desses ( link ).
Use o BIND para servir sempre o seu DNS.
Como as outras respostas nesta página descrevem, existem maneiras de obter uma funcionalidade semelhante, mas:
Não, não há arquivo "por usuário" como /etc/hosts
ou qualquer outra forma de substituir a resolução de nomes padrão como um usuário não privilegiado no GNU / Linux.
Parece muito mais fácil escrever um script que elabore quais hosts estão ativos e, em seguida, define o nome do host para o seguinte comando rsync. Algo parecido com isto
#!/usr/bin/sh HOST="none" TESTFILE=/tmp/testfile.$$ touch $TESTFILE for i in hosta hostb hostc olivia do scp $TESTFILE $i:/tmp if [ $? -eq 0 ] then HOST=$i fi done rm $TESTFILE if [ $HOST != "none" ] then echo $HOST is up rsync -av --rsh=ssh files $HOST:/dest else echo "No host found" exit 1 fi
Isso não foi testado e tem suposições, então você terá que modificá-lo para se adequar.
Tags hosts linux local-area-network