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

16

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

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

Спасибо.

mrucci
источник
2
Ух ты. Я собирался опубликовать этот же вопрос, но я вижу, у вас есть. Это имеет смысл для меня, но, как ни странно, его нет в Linux. В моем случае у меня на устройстве Samsung Galaxy Tab находится заключенная в тюрьму форма Linux с ОС Android, и из-за моей веб-разработки мне часто приходится редактировать / etc / hosts. В заключённом Linux вы не можете редактировать / etc / hosts. Итак, ~ / .hosts было бы действительно здорово иметь, безусловно!
ServerChecker
Вы нашли какое-нибудь решение в конце?
Quamis
К сожалению нет. Может быть, это невозможно, потому что это угроза безопасности.
Mrucci
1
Для SSH вы можете использовать псевдонимы в качестве частичного обходного пути. Вставьте alias ssh="ssh "ваш .bashrc (обратите внимание на конечные пробелы в конце псевдонима) вместе с, alias myhost="me@real-name-of-my-host.com"и тогда вы можете сказать, ssh myhostи это будет работать.
Ноа Суссман
Лучшим подходом для обхода этой проблемы будет добавление записи в вашем месте, ~/.ssh/configгде вы добавляете строки: Host my-hostи Hostname 10.0.0.xxx<- IP-адрес машины. Приятно то, что он также позволяет вам указать имя пользователя, порт, какой ключ использовать и т. Д.
Ciprian Tomoiagă

Ответы:

8

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

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

Тедди
источник
Есть ли способ указать HOSTNAMES.local в локальном файле (для пользователя), а не в / etc / avahi / hosts?
Mrucci
Я думаю, что Тедди означает, что у каждой машины будет имя, которое обнаружит Авахи. Должно ли отображение компьютера на имя действительно отличаться для каждого пользователя?
pjc50
нет, он не должен меняться для каждого пользователя. Мне просто нужен метод для совместного использования псевдонимов хоста (способ, который позволяет мне делать ping hostnameAlias) без привилегий root. Avahi почти делает правильную работу, потому что я могу использовать машину $ HOSTNAME в качестве псевдонима. Просто для любопытства: где делается это отображение?
Mrucci
3

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

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

Борис Бух
источник
2

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

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

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

Например

Это, однако, было бы довольно странно, нестандартно.

MarkR
источник
0

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

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

Томас Дентон
источник
0

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

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

daveloyall
источник
-1

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

#! / USR / бен / ш

HOST = "нет"
TestFile = / TMP / TestFile. $$
коснитесь $ TESTFILE
для меня в хосте hostb hostc olivia
делать
    scp $ TESTFILE $ i: / tmp
    если [$? -экв. 0]
    тогда
        HOST = $ I
    фи
сделано
RM $ TESTFILE

если [$ HOST! = "нет"]
тогда
    echo $ HOST активен
    rsync -av --rsh = ssh файлы $ HOST: / dest
еще
    echo "Хост не найден"
    выход 1
фи

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

горилла
источник
Спасибо за ответ, но я пытался решить другую проблему: как сохранить и поделиться списком имен хостов (hosta hostb hostc olivia) в домашней папке пользователя, чтобы я мог написатьrsync src olivia:/dst
mrucci