我思考这是由保存当前虚拟终端的设备节点SSH_TTY
设置的环境变量;ssh
例如/dev/pts/0
, /dev/pts/1
, 等
我知道,当我登录到 SSH 服务器时,只需输入 即可看到分配给每个会话的设备节点echo $SSH_TTY
。我可以看到全部w
通过输入或who
从终端使用的设备节点(至少在我的用户名下) 。我可以使用(或)$SSH_TTY
中的脚本中的值来(例如)决定为每个会话打开哪个目录。 IOW,当我的登录进行到阅读时,已经分配了值。~/.profile
~/.bash-profile
SSH_TTY
~/.profile
我还想SSH_TTY
向 MOTD 中的用户传达 的价值,但目前无法做到这一点。我思考这是因为在登录时root
运行所有脚本,并且没有.所以我寻找了一个/etc/update-motd.d
root
SSH_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)。