ssh,“上次登录”, `last` 和 OS X

ssh,“上次登录”, `last` 和 OS X

我已经用 Google 搜索了尽可能多的信息,但针对 OS X,我找不到答案。没什么问题,但好奇心很高。

$ssh [email protected]
Password:
Last login: Wed Apr  7 21:28:03 2010 from my-laptop.local
^lonely tylenol^
  • 第 1 行是我的命令
  • 第 2 行是要求输入密码的 shell
  • 我的问题来自第 3 行
  • 第 4 行来自 /etc/motd

我在 .bash* 文件的 ~/ 中找不到任何包含字符串“Last Login”的内容,我想修改它。它会执行某种类型的主机名查找,但我无法确定。

如果我 ssh 到另一台主机:

$ssh [email protected]
Last login: Wed Apr  7 21:14:51 2010 from 123-234-321-123-some.cal.isp.net.example
hi there, you are on box 456
  • 第 1 行是我的命令
  • 第 2 行再次是我的问题的来源
  • 第 3 行来自 /etc/motd

*带破折号的 IP 地址是不是反转

在此远程主机上,我已经设置了 ~/.ssh 及其相应的密钥,因此无需输入密码

“上次登录:”来自哪里,日期戳来自哪里,最重要的是,主机名来自哪里?

[电子邮件保护](盒子 456)$echo hostname remote.location.example456.com

或者使用 dig,以确保我已经设置了 rDNS/PTR,对此我没有权威,但我的 ISP 已正确设置...

$dig -x 123.234.321.123  PTR   remote.location.example456.com

或者

$dig PTR 123.321.234.123.in-addr.arpa. +short
remote.location.example456.com.

我以前hostname使用的地址是 123-234-321-123-some.cal.isp.net.example,我将其设置为hostname -s remote.location.example456.com,因为看到这么长的名字很讨厌。这解决了 $echo 的值,hostname现在它返回 remote.location.example456.com。

Mac OS X 10.6 似乎确实遵守:

touch ~/.hushlogin

如果将该文件留空,则登录时 shell 上将什么也得不到。我想知道是什么控制着 IP 的主机解析,以及这一切是如何工作的。例如,运行last报告会列出我的登录名的大量列表,这些登录名的主机名非常长,而它们最好只是 remote.location.example456.com。

wtmp更让我困惑的是,阅读和的手册页lastlog,似乎 lastlog 在 OS X 上没有使用,/var/log/lastlog 不存在。实际上,在 10.5 或 10.6 上都不存在这些:

 /var/run/utmp     The utmp file.
 /var/log/wtmp     The wtmp file.
 /var/log/lastlog  The lastlog file.

如果我假设系统正在进行某种反向查找,我当然不知道它是什么,因为它并不准确。

答案1

我的 10.6 机器上的手册页将我指向 asl(3)、utmpx(5) 和 endutxent(3)。似乎现代 Mac OS X 在 Apple SysLog (asl) 数据库文件 /var/log/asl/* 中记录了类似 utmp/wtmp/lastlog 的信息。

看来,当这些主机被命名为长主机名时,那些让您烦恼的长主机名就记录在数据库中了,除非您修剪或编辑 asl 数据库,否则无法摆脱它们。

答案2

man sshd_config

 PrintLastLog
         Specifies whether sshd(8) should print the date and time of the
         last user login when a user logs in interactively.  The default
         is ``yes''.

这至少解释了为什么你会看到该消息。

关于主机名解析 - 它将使用系统解析器库,这可能会返回与 dig 不同的结果。特别是,如果您在本地(即远程计算机的本地)/etc/hosts 文件中有一个条目,则将首先检查该条目(可能取决于解析器的配置方式)。如果远程计算机正在使用本地(对它而言)名称服务器,该名称服务器提供的结果与公共结果不同(例如,您的 ISP 在内部提供一组 PTR 记录,在外部提供另一组 PTR 记录),这也可以解释差异。

相关内容