Узнайте, есть ли локальный пользователь, вошедший в систему при входе через ssh

Мне нужно выполнить некоторые вычисления на машине, к которой я могу получить доступ только удаленно, но которая также служит рабочей станцией. Их много, и я хочу выбрать «бесплатный». Бесплатное означает, что в этом случае никто не вошел локально.

Моей первой попыткой была команда who, но по некоторым причинам в ней перечислены только «выбранные» пользователи, и я не могу точно узнать, как они выбраны. Следующая попытка: ps aux | cut -d " " -f1 | sort | uniq: лучше показать группу демонов, но также и локального пользователя, которого не отображало who.

Мое текущее решение состоит в том, чтобы пойти и сделать ps aux | grep "gnome-session", что лучше, но все еще дает мне много мусора. В идеале я ищу что-то, что я могу включить в свой профиль ssh, который предупреждает меня о (активных) локальных пользователях при входе в систему.

РЕДАКТИРОВАТЬ:

  • Ни who, ни w не вернули локального пользователя. Является ли это неожиданным поведением?
  • uptime, с другой стороны, показали мне правильное количество пользователей (локальные и удаленные пользователи минус системы, такие как root)
  • finger не установлено [1111 ]
6
задан 12.01.2020, 12:35

8 ответов

Установлена ​​ли команда finger или нет? Это должно дать список всех пользователей, которые вошли в систему и откуда (то есть с другого компьютера или непосредственно на компьютер), а также сообщить, сколько времени этот пользователь простаивал.

Для получения дополнительной информации см. справочную страницу по Ubuntu finger .

4
ответ дан 12.01.2020, 12:35

Я бы пошел с:

who | cut -d' ' -f1 | sort | uniq

Это покажет список реальных пользователей. Если список пуст - машина находится в состоянии выхода из системы, ожидая, чтобы кто-то вошел в систему.
ps aux также покажет некоторых пользователей системы, которых вы, вероятно, не хотите видеть.

2
ответ дан 12.01.2020, 12:36

Быстрая и грязная попытка:

ps au --no-heading | cut -d " " -f1 | uniq
0
ответ дан 12.01.2020, 12:37

Мне нравится этот:

for i in $(ls /dev/pts/*);do echo "TTY $i - $(ps e -t $i|grep -oP "(?<=(RUSER\=))[a-z]*"|uniq)";done ; echo -e '\n+++\n';  for i in $(pgrep ssh);do pstree -paul $i;done
0
ответ дан 12.01.2020, 12:37

last

просматривает / var / log / wtmp и отображает журнал последних пользователей, вошедших в систему, включая , которые в настоящее время вошли в систему.

1
ответ дан 12.01.2020, 12:38

Подумайте только о том, чтобы установить максимальную точность для ваших расчетов. Следует избегать перегрузки ресурсов для любых других пользователей, которые могут войти в систему.

nice -n 19 your_calculation_command
1
ответ дан 12.01.2020, 12:39

Мой ответ перечислить каждого пользователя, вошедшего в систему, уникальным способом.

w | tail -n +3 | cut -d " " -f1 | sort | uniq
1
ответ дан 12.01.2020, 12:40

Используйте w

Из w man page:

Показать, кто вошел в систему и что они делают.

Пример вывода:

$ w
09:15:10 up 43 min,  2 users,  load average: 0.74, 0.38, 0.24

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU  WHAT

kucing   tty7     :0               08:32   43:15m 57.73s  0.18s x-session-manager
kucing   pts/0    :0.0             08:48    0.00s  0.24s  0.00s w´
7
ответ дан 12.01.2020, 12:40

Теги

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