попытка записать сценарий удара, который посылает электронное письмо с выводом от двух человечности 18.04 переменных

Проблема, которую я имею, состоит в том, что действие, которое я ищу, состоит в том, чтобы sendemail отправил мне электронное письмо, которое содержит обоих w вывод от пользователя SSH и вывод от выполнения lsof -u на $SSH_USER для наблюдения, какие открытые файлы они имеют.

Вот сценарий:

#!/usr/bin/env bash
# This line looks for the string "pts/" in the output of `w`, then strips out the owner information and passes it to SSH_USER

SSH_USER="$(w | grep "pts/" | cut -d" " -f1 | awk 'NR < 2')";
SSH_USERS="$(w)"

if w  | grep -q "pts/"; then
  echo "someone logged-in via ssh" && sendemail -f "xxx.notify@gmail.com" -u "someone has logged-in via ssh " -t "my.email@gmail.com" -s "smtp.gmail.com:587" -m "$SSH_USERS \n lsof -u "$SSH_USER"" -o tls=yes -xu "xxx.notify@gmail.com" -xp 'my_notify.email.pw'
else
  echo "nobody logged-in via ssh"
fi

Обратите внимание, что-m опция состоит в том, куда тело электронной почты идет, и я заполняю его двумя переменными. Каждый - вывод w и другой ouput lsof -u $SSH_USER, который в этом случае должен расшириться до lsof -u robert.

Вот вывод w:

23:46:23 up  3:41,  3 users,  load average: 0.40, 0.44, 0.50
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
robert   :0       :0               20:07   ?xdm?   6:10   0.01s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-se
robert   pts/1    10.0.0.3         22:56   50:04   0.04s  0.04s -bash
robert   pts/4    10.0.0.3         23:10   36:16   0.04s  0.04s -bash

Вот электронная почта, которую я получаю:

23:40:31 up  3:35,  3 users,  load average: 0.60, 0.60, 0.56
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
robert   :0       :0               20:07   ?xdm?   6:05   0.01s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu
robert   pts/1    10.0.0.3         22:56   44:12   0.04s  0.04s -bash
robert   pts/4    10.0.0.3         23:10   30:24   0.04s  0.04s -bash 
 lsof -u robert

Вы видите у основания электронной почты, которую это говорит lsof -u robert таким образом, это разворачивает переменную правильно - но это просто echos это, вместо того, чтобы отобразить вывод команды.

Должно быть что-то, в чем я выполняю неправильно -m "$SSH_USERS \n lsof -u "$SSH_USER"" часть сценария - какова могла быть причина, что это только отправляет мне вывод от первой половины сообщения? Как получить это lsof -u $SSH_USER чтобы на самом деле работать и обеспечить вывод, а не просто повторяют себя?

1
задан 3 December 2018 в 12:28

1 ответ

Необходимо использовать замену команды Bash таким же образом, поскольку Вы сделали ранее в сценарии.

Изменение:

-m "$SSH_USERS \n lsof -u "$SSH_USER""

кому:

-m "$SSH_USERS \n $(lsof -u "$SSH_USER")"

Это будет на самом деле работать lsof управляйте, чтобы Вы искали.

Также стоит отметить, что двойные кавычки не вкладывают, они действуют как переключатель, som в исходной версии, Вы заключаете в кавычки "$SSH_USERS \n lsof -u " в то время как $SSH_USER закрывается кавычки, затем "" в конце ничего не делает.

2
ответ дан 7 December 2019 в 13:20

Другие вопросы по тегам:

Похожие вопросы: