我在定制 ARM 板上使用嵌入式 Linux 发行版 (Lime2)。
通过 SSH 登录时,显示以下内容:
root@mybox ~ # ssh localhost
root@localhost's password:
_ _ ____
| | (_)_ __ ___ ___ |___ \
| | | | '_ ` _ \ / _ \ __) |
| |___| | | | | | | __/ / __/
|_____|_|_| |_| |_|\___| |_____|
welcome to mybox!
Last login: Wed May 4 19:50:28 2016 from localhost
Load: 1.01, 1.10, 0.86 - Board: 27.3°C - Memory: 929Mb
root@mybox ~ #
我想知道这个提示的各个组成部分来自哪里。这就是我想到的:
/bin/login
显然,密码提示行来自- 我不知道 Lime2 横幅的来源
- 欢迎信息是我在 /etc/motd 中输入的内容
- 我想“上次登录”行是由
/bin/login
某个服务生成的PAM
- 我发现隐藏的“加载”行
/etc/bash.bashrc.custom
那么...除了 之外/etc/motd
,在生成登录 shell 之前还会显示或执行哪些其他文件?这个 Lime2 横幅来自哪里?
答案1
您可以使用strace
显示所有open
系统调用,这将打印出所有访问的文件。
追踪一个本地登录会话,在 root shell 中运行:
strace -f -e open login 2>&1
追踪一个ssh登录会议:
strace -f -e open -p <sshd_pid> 2>&1
例如,首先确定ssh守护进程的PID:
router:~# ps -ef | grep ssh
root 4816 1 0 May04 ? 00:00:00 /usr/sbin/sshd -D
root 6584 5941 0 01:18 ? 00:00:00 sshd: root@pts/0
root 6647 6381 0 01:23 pts/0 00:00:00 grep --color=auto ssh
然后使用选项-p
后跟 sshd 的 PID 进行跟踪:
strace -f -e open -p 4816 2>&1
现在从另一个终端使用 ssh 登录。