При входе на сервер Ubuntu через SSH следующая строка выглядит так: показано:
Последний вход: Пн 18 июл 20:00:00 2016 от 111.111.111.111
На других серверах 111.111.111.111
заменяется именем хоста me.domain.com
, поскольку мой rDNS настроен правильно.
Как мне настроить этот Ubuntu 16.04 LTS Server, чтобы сделать то же самое?
PAM генерирует эту строку текста из-за следующей строки конфигурации в /etc/pam.d/login
# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
session optional pam_lastlog.so
. Есть некоторые параметры конфигурации, которые вы можете передать этому модулю pam, но я ничего не вижу о разрешении имен хостов. / var / log / lastlog - это место, где хранится информация, которую вы видите, и в этом файле хранятся IP-адреса, а не имена хостов. Я думаю, это имеет смысл с точки зрения безопасности. Я также проверил часть исходного кода ... Я не нашел ничего очевидного в разрешении IP-адресов (по крайней мере, не в pam_lastlog.c). Возможно, он спрятан где-то еще, и я его пропустил.
Этот сценарий perl будет использовать lastlog
для печати последней информации для входа в систему для текущего пользователя и будет преобразовывать адреса IPv4 в имена хостов
Вы можете добавить его ваш / etc / profile
или /etc/bash.bashrc
или под /etc/update-motd.d/
и т. д., чтобы получить то же самое эффект. Он не идеально отформатирован, поэтому вам может потребоваться поиграть с ним, чтобы он выглядел так, как вы хотите.
#!/usr/bin/perl use warnings; use Socket; open(my $lastLogOut,"lastlog -u $ENV{LOGNAME} |"); while(my $entry = ) { chomp($entry); my $ipAddress; my $hostname; if($entry =~ /(\d+\.\d+\.\d+\.\d+)/) { $ipAddress = $&; if($hostname = gethostbyaddr(inet_aton($ipAddress), AF_INET)) { $entry =~ s/$ipAddress/$hostname/g; } } print $entry."\n"; }
Пример вывода
$ perl lastlog.dns
Username Port From Latest
ryan pts/5 localhost Mon Jul 18 22:26:28 -0400 2016
Если вы хотите использовать приведенный выше сценарий во время входа в систему , вы можете захотеть остановить PAM от распечатки информации о последнем входе в систему. Добавьте silent
в строку pam_lastlog в /etc/pam.d/login
.
session optional pam_lastlog.so silent
Откройте файл sshd_config и убедитесь, что это
UseDNS yes
После этого перезапустите сервер ssh. Я пробую это в Centos 7, и IP становится именем хоста.
Более подробная версия ответа @akhfa:
Откройте файл /etc/ssh/sshd_config
в текстовом редакторе, например nano
. ] или vim
sudo nano /etc/ssh/sshd_config
В нижней части файла вы должны найти это (это нормально, если вы его не видите)
#UseDNS no
Если вы найдете это, просто раскомментируйте строку, удалив #
с самого начала:
UseDNS yes
Если вы не можете найти UseDNS
в файле, просто добавьте новую строку в конец файла, содержащую . ]UseDNS yes
(как указано выше).
Сохраните и закройте файл.
Перезапустите службу OpenSSH. В Ubuntu вы можете использовать systemctl
:
sudo systemctl restart ssh
# On some systems, it may be under openssh-server
sudo systemctl restart openssh-server
Теперь, чтобы гарантировать, что вы потенциально не были заблокированы из SSH, откройте новое отдельное соединение SSH и подключитесь к рассматриваемая система. (если вы не можете подключиться, вы сломали свою конфигурацию SSH, запустите systemctl status ssh
- исправьте свою конфигурацию / найдите, как это исправить, пока у вас все еще открыто рабочее соединение SSH)
Вы должны теперь см.:
Last login: Mon Jan 1 20:00:00 2020 from 111.111.111.111
Если вы повторно подключаетесь или открываете еще одно SSH-соединение, вы должны увидеть свое имя хоста из предыдущего подключения (при условии, что IP-адрес, с которого вы подключаетесь, имеет Reverse DNS)
Last login: Mon Jan 1 20:00:00 2020 from some.host.example.com
Этот ответ был протестирован как на Ubuntu Server 18.04 (Bionic Beaver), так и на Debian 9 (Stretch) 21 января / 2020 г. — этот ответ может работать или не работать в зависимости от вашего дистрибутива Linux / версии OpenSSH