Назад | Перейти на главную страницу

Файл хостов для каждого пользователя

Есть ли способ определить псевдонимы хоста (например, в /etc/hosts) для каждого пользователя, т.е. в файле /home/user/.hosts ?

Моя основная цель - легко обмениваться псевдонимами хостов через rsync между машинами в моей небольшой локальной сети. Поскольку нет машины, которая всегда была бы надежно подключена, DNS-сервер не подходит (верно?).

Спасибо.

Лучшим решением было бы установить Avahi и libnss-mdns, а затем использовать HOSTNAME.local адреса.

Эти имена не будут назначаться для каждого пользователя, но решат поставленную вами задачу - иметь общие имена для всех машин в локальной сети.

Видеть https://github.com/figiel/hosts чтобы сделать именно то, что вы просите.

Это небольшая библиотека, загружаемая через LD_PRELOAD и переопределяющая gethostbyname () и несколько связанных функций, которые программы используют для разрешения DNS. У меня это хорошо работает. Единственное предостережение, которое я обнаружил, заключается в том, что веб-браузер Chrome не использует собственное разрешение DNS, а вместо этого реализует собственный DNS-клиент. Чтобы решить эту проблему, вам нужно отключить DNS-клиент Chrome.

Реализация glibc в Linux не может этого сделать.

Но вы можете расширить его с помощью библиотеки nss, которая могла бы. Это было бы легко написать, поскольку вы могли бы оторвать соответствующую часть libc, которая находится в каталоге nss_files в

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

Например

Однако это было бы довольно странно и нестандартно.

Как описывают другие ответы на этой странице, есть способы достичь аналогичной функциональности, но:

Нет, нет файла для каждого пользователя, например /etc/hosts или любой другой способ переопределить разрешение имен по умолчанию в качестве непривилегированного пользователя в GNU / Linux.

Если у вас есть две машины, которые будут работать большую часть времени, вы можете установить BIND на каждой из них и сделать их DNS-серверами ... или получить один из них (http://www.marvell.com/products/embedded_processors/developer/kirkwood/sheevaplug.jsp).

Используйте на нем BIND, чтобы всегда обслуживать DNS.

Казалось бы, намного проще написать сценарий, который определяет, какие хосты активны, а затем устанавливает имя хоста для следующей команды rsync. Что-то вроде этого

#!/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

Это не проверено и содержит предположения, поэтому вам придется изменить его в соответствии с требованиями.