我想向通过 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
文件中;.bashrc
on the one hand 和.profile
or之间的区别.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"