Arquivo de hosts por usuário

16

Existe uma maneira de definir aliases de host (como em /etc/hosts) em uma base 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 existe uma máquina que esteja sempre sempre conectada com segurança, um servidor DNS não é uma opção (certo?).

Obrigado.

mrucci
fonte
2
Oh uau. Eu estava prestes a postar essa mesma pergunta, mas vejo que você tem. Faz sentido para mim, mas estranhamente não existe no Linux. No meu caso, tenho uma forma de Linux preso com sistema operacional Android no meu dispositivo Samsung Galaxy Tab e, devido ao meu desenvolvimento na web, muitas vezes preciso editar o / etc / hosts. Em um Linux preso, você não pode editar o / etc / hosts. Então, um ~ / .hosts seria muito legal de se ter, definitivamente!
ServerChecker
você encontrou alguma solução no final?
quamis
Infelizmente não. Talvez não seja possível porque é uma ameaça à segurança.
Mrucci 26/10/11
1
Para SSH, você pode usar aliases como uma solução parcial. Coloque alias ssh="ssh "seu .bashrc (observe o espaço em branco à direita no final do alias) junto com alias myhost="[email protected]"e, em seguida, você poderá dizer ssh myhoste ele funcionará.
Noah Sussman
Uma abordagem melhor para a solução alternativa seria colocar uma entrada no seu local ~/.ssh/configonde você adiciona as linhas: Host my-hoste Hostname 10.0.0.xxx<- IP da máquina. O bom é que também permite que você especifique nome de usuário, o porto, que a chave para usar etc
Ciprian Tomoiagă

Respostas:

8

Uma solução melhor seria instalar o Avahi e o libnss-mdns e, em seguida, usar HOSTNAME.localendereç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.

Urso de pelúcia
fonte
Existe uma maneira de especificar o HOSTNAMES.local em um arquivo local (por usuário) em vez de em / etc / avahi / hosts?
mrucci
Eu acho que Teddy significa que cada máquina teria um nome que Avahi descobriria. O mapeamento da máquina para o nome realmente varia de acordo com o usuário?
Pjc50
não, não deve variar de acordo com o usuário. Eu só preciso de um método para compartilhar aliases de host (de uma maneira que me permita fazer ping hostnameAlias) sem privilégios de root. O Avahi quase faz o trabalho certo, porque eu posso usar a máquina $ HOSTNAME como um alias. Apenas por curiosidade: onde esse mapeamento é feito?
Mrucci
3

Consulte https://github.com/figiel/hosts para obter uma maneira de fazer exatamente o que você pede.

Essa é uma pequena biblioteca, carregada via LD_PRELOAD e que substitui gethostbyname () e várias funções relacionadas que os programas usam para resolução de DNS. Funciona bem para mim. A única ressalva que descobri é que o navegador Chrome não usa resolução DNS nativa, mas implementa seu próprio cliente DNS. Para resolver esse problema, você precisa desativar o cliente DNS do Chrome .

Boris Bukh
fonte
2

A implementação glibc do Linux não pode fazer isso.

Mas você pode estendê-lo com uma biblioteca nss que poderia. Isso seria fácil de escrever, pois você pode extrair a parte relevante da libc, que está no diretório nss_files em

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

Por exemplo

Isso seria, no entanto, uma coisa não-padrão bastante estranha de se fazer.

MarkR
fonte
0

Como as outras respostas nesta página descrevem, existem maneiras de obter funcionalidades semelhantes, mas:

Não, não existe um arquivo "por usuário" como /etc/hostsqualquer outra maneira de substituir a resolução de nome padrão como um usuário não privilegiado no GNU / Linux.

daveloyall
fonte
-1

Parece muito mais fácil escrever um script que determine quais hosts estão ativos e, em seguida, defina o nome do host para o seguinte comando rsync. Algo assim

#! / usr / bin / sh

HOST = "nenhum"
TESTFILE = / tmp / testfile. $$
toque em $ TESTFILE
para i em hosta hostb hostc olivia
Faz
    scp $ TESTFILE $ i: / tmp
    se [$? -eq 0]
    então
        HOST = $ i
    fi
feito
rm $ TESTFILE

if [$ HOST! = "none"]
então
    echo $ HOST está ativo
    rsync -av --rsh = arquivos ssh $ HOST: / dest
outro
    eco "Nenhum host encontrado"
    saída 1
fi

Isso não foi testado e possui suposições, portanto você precisará modificá-lo para se adequar.

gorila
fonte
Obrigado pela resposta, mas eu estava tentando resolver um outro problema: como armazenar e compartilhar a lista de nomes de host (hosta HostB hostc Olivia) em uma pasta pessoal do usuário, de modo que eu possa escreverrsync src olivia:/dst
mrucci