GDM 登录 GNOME 后运行脚本吗?

GDM 登录 GNOME 后运行脚本吗?

ssh我最近买了一台笔记本电脑,并编写了一个脚本,如果某个用户通过 GDM 登录,则该脚本会设置反向隧道。我这样做是因为我的笔记本电脑过去被盗过,并且希望做好准备,以防再次发生这种情况。

我将脚本放在以下目录中,只要用户登录,GDM 就会以 root 身份运行。

/etc/gdm/PostLogin/Default

这是脚本本身:

if [[ "$(users)" = "user user" ]]; then
   while (( "$(netstat -an | grep -E "\:22[ \t]+" | grep ESTABLISHED | \
    wc -l)" < "1" ))
      do
      ssh -fvN -p 22 -R tunnelport:localhost:sshdport [email protected]
      sleep 20
   done
fi

如果我已经登录,该脚本就会运行,但如果我通过 GDM 登录,第一个if语句就会失败。如果我删除该if语句,那么它会挂在ssh命令上。关于我能做什么有什么想法吗?

答案1

我将启用此脚本,使其变得详细并将其输出写入文件,以便您可以更轻松地确定是什么导致了它的问题。

为了增加冗长性,请在第一个if语句之前添加此内容。

set -x

要让脚本将所有内容记录到文件中,您可以使用此 SO Q&A 标题中描述的方法:如何完整记录所有 bash 脚本操作?。以下内容大部分摘自该帖子:

#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':

解释:

  1. exec 3>&1 4>&2

    保存文件描述符,以便它们可以恢复到重定向之前的状态,或者使用自身输出到以下重定向之前的状态。

  2. trap 'exec 2>&4 1>&3' 0 1 2 3

    恢复特定信号的文件描述符。通常不需要,因为它们应该在子 shell 退出时恢复。

  3. exec 1>log.out 2>&1

    将 stdout 重定向到文件 log.out,然后将 stderr 重定向到 stdout。请注意,当您希望它们进入同一个文件时,顺序很重要。在将 stderr 重定向到 stdout 之前,必须先重定向 stdout。

相关内容