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

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

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

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

Править:

  • Ни один who ни w действительно возвращал локального пользователя. Действительно ли это - неожиданное поведение?
  • uptime с другой стороны, показал мне правильное количество пользователей (локальный и удаленный минус пользователи системы как корень)
  • finger не установлен
6
задан 1 June 2012 в 09:52

8 ответов

Используйте 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´
0
ответ дан 1 June 2012 в 09:52

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

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

0
ответ дан 1 June 2012 в 09:52

Я бы пошел с:

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

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

0
ответ дан 1 June 2012 в 09:52

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

nice -n 19 your_calculation_command
0
ответ дан 1 June 2012 в 09:52

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

w | tail -n +3 | cut -d " " -f1 | sort | uniq
0
ответ дан 1 June 2012 в 09:52

last

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

0
ответ дан 1 June 2012 в 09:52

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

ps au --no-heading | cut -d " " -f1 | uniq
0
ответ дан 1 June 2012 в 09:52

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

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
ответ дан 1 June 2012 в 09:52

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

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