向 ssh 用户提供或推送菜单

向 ssh 用户提供或推送菜单

我想向通过 ssh 登录到我的 debian 设备的任何用户自动显示一个菜单。目前,他们必须登录并在命令行上手动运行 menu.sh 脚本。这可以做到吗?

答案1

您可以编辑/etc/profile(系统范围)或~user/.profile(每个用户,所有 bourne shell)或~user/.bash_profile(每个用户,特定于 bash)或类似的脚本来调用菜单。

如果你仅有的想要显示给通过SSH登录的用户,请检查SSH_CLIENT环境变量是否已设置:

if [ ! -z "$SSH_CLIENT" ]; then
    menu.sh
fi

否则它将被用于每一个登录。另外,你应该不是将其放入.bashrc文件中;.bashrcon the one hand 和.profileor之间的区别.bash_profile在于前者是为每一个shell 已启动,而后者仅启动登录贝壳。

答案2

这是@Wouter 答案的替代方案。

大多数 *nix 机器都有一个存储用户数据的文件,例如“/etc/passwd”。该文件存储有关用户帐户的多项信息,其中之一是“shell”,如果用户正确发送登录名/密码,则该“shell”将运行。以下示例显示当用户登录系统时,bash 将运行:

slave:x:0:0:Linux Slave User,,,:/home/user:/bin/bash

这样,你就可以将最后一部分更改为你想要运行的任何内容。

那么和之前的答案有什么不同呢? - 在大多数 Linux 机器中,这个答案比前一个更安全。

此方法将直接运行您想要的程序/脚本,并且 - 如果脚本或程序中断(例如错误),用户将立即注销 - 因为用户已附加到该进程。

前面的答案会将用户附加到bash(或另一个shell),如果运行脚本完成,用户将直接进入bash提示符并可以在Linux上运行任何命令。

换句话说,如果您运行的菜单应该是您希望用户与 Linux 交互的唯一方法,请确保您的菜单永远不会完成或中断。如果您的菜单上可能存在错误,请改用此答案的选项。

您不必手动编辑,/etc/password,而是使用以下命令(作为超级用户):

chsh -s "your program" "login"

相关内容