如何阻止SSH登录同一用户时执行.bash_profile中的自启动程序
解决方案
你可以在.bash_profile中增加会话类型判断逻辑,仅当检测为本地tty1登录时才执行程序启动命令,具体修改如下:
方案1:通过SSH环境变量判断(通用性更强)
SSH登录时系统会自动设置SSH_TTY、SSH_CLIENT等专属环境变量,本地tty登录不存在此类变量,只需将启动逻辑包裹在判断规则内即可:
# 编辑.bash_profile sudo nano /home/my_user/.bash_profile
将原有启动内容替换为以下配置:
# 仅非SSH登录时执行程序启动 if [ -z "$SSH_TTY" ]; then cd /home/my_user/my_program sudo ./program fi
方案2:通过登录终端判断(精准匹配tty1自动登录场景)
如果仅希望tty1自动登录时启动程序,本地手动切换tty2/3等登录时也不启动,可以直接判断当前登录终端:
# 仅tty1登录时执行程序启动 if [ "$(tty)" = "/dev/tty1" ]; then cd /home/my_user/my_program sudo ./program fi
补充说明:免密执行sudo配置(可选)
如果自动启动时出现sudo密码输入提示导致卡住,可以配置sudo免密规则:
- 执行
sudo visudo打开sudoers配置文件 - 在文件末尾添加如下规则:
my_user ALL=(ALL) NOPASSWD: /home/my_user/my_program/program
- 保存退出即可生效,该用户执行指定program时无需输入sudo密码。
修改完成后重启验证即可:本地tty1自动登录会正常启动目标程序,同一用户SSH登录时不会触发启动逻辑。
内容的提问来源于stack exchange,提问作者user1624184
相关产品推荐
相关产品推荐

