Ubuntu 服务器 - 让 `lastlog` 显示主机名而不是 IP 地址

Ubuntu 服务器 - 让 `lastlog` 显示主机名而不是 IP 地址

通过 SSH 登录 Ubuntu Server 时,显示以下行: Last login: Mon Jul 18 20:00:00 2016 from 111.111.111.111

在其他服务器上,111.111.111.111由主机名替换me.domain.com,因为我的 rDNS 设置正确。

我该如何配置这个 Ubuntu 16.04 LTS 服务器来执行相同操作?

答案1

打开你的 sshd_config 文件并确保

UseDNS yes

之后,重新启动 ssh 服务器。我在 Centos 7 中尝试此操作,IP 变为主机名。

答案2

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

使用警告;
使用套接字;

打开(我的$lastLogOut,“lastlog -u $ENV{LOGNAME} |”);

虽然(我的$entry =){
        chomp ( $entry );
        我的$ip地址;
        我的$主机名;

        如果($entry =〜/(\ d + \ \ d + \ \ d + \ d +)/){
                $ip地址 = $&;
                如果($hostname = gethostbyaddr(inet_aton($ipAddress),AF_INET)){
                        $entry =~ s/$ip地址/$主机名/g;
                }
        }

        打印$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

答案3

更详细的版本@akhfa 的回答

在文本编辑器中打开该文件/etc/ssh/sshd_config,例如nanovim

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 已经反向 DNS

Last login: Mon Jan 1 20:00:00 2020 from some.host.example.com

此答案已于 2020 年 1 月 21 日在 Ubuntu Server 18.04 (Bionic Beaver) 和 Debian 9 (Stretch) 上进行了测试 - 此答案可能有效,也可能无效,具体取决于您的 Linux 发行版/OpenSSH 版本

相关内容