root 如何访问 SSH_TTY

root 如何访问 SSH_TTY

思考这是由保存当前虚拟终端的设备节点SSH_TTY设置的环境变量;ssh例如/dev/pts/0, /dev/pts/1, 等

我知道,当我登录到 SSH 服务器时,只需输入 即可看到分配给每个会话的设备节点echo $SSH_TTY。我可以看到全部w通过输入或who从终端使用的设备节点(至少在我的用户名下) 。我可以使用(或)$SSH_TTY中的脚本中的值来(例如)决定为每个会话打开哪个目录。 IOW,当我的登录进行到阅读时,已经分配了值。~/.profile~/.bash-profileSSH_TTY~/.profile

我还想SSH_TTY向 MOTD 中的用户传达 的价值,但目前无法做到这一点。我思考这是因为在登录时root运行所有脚本,并且没有.所以我寻找了一个/etc/update-motd.drootSSH_TTY解决方法

我发现的唯一一个是这个:

#!/usr/bin/sh
su pi -c echo "Greetings, I see you rode in on $SSH_TTY"

但这悄无声息地失败了。

我怎样才能做到这一点?

答案1

从文件中会话.c,我们可以看到,在 SSH 服务器内部do_setup_env设置的函数SSH_TTY是在会话建立之后调用的,所以 Ubuntu 的 没有办法更新-motd(5)框架来访问它并将其添加到/etc/motd

由于问题意图的主要部分大概是“SSH_TTY向用户传达 的值”,因此只需从用户的输出中输出该环境变量的值$HOME/.profile服务器上应该满足该请求。如果出于某种原因需要保存该值,则可以将输出记录到文件中,例如:

# Contents of $HOME/.profile ...

printf "SSH_TTY=%s\n" "$SSH_TTY" | tee "$HOME"/.ssh_tty

¹ 根据 update-motd(5) 手册页本身,

Ubuntu引入了update-motd框架

这可以通过检查 Trisquel 和 Amazon Linux 的软件包存储库来确认,这是除了(未正式支持的)Arch 之外唯一拥有该软件包的其他发行版用户存储库(来源:repology.org)。

相关内容