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

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

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

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

EDIT:

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

51 ответ

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

nice -n 19 your_calculation_command
1
ответ дан 6 August 2018 в 01:00

last

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

7
ответ дан 6 August 2018 в 01:00

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

ps au --no-heading | cut -d " " -f1 | uniq
0
ответ дан 6 August 2018 в 01:00

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

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
ответ дан 6 August 2018 в 01:00

Я бы пошел с:

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

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

2
ответ дан 6 August 2018 в 01:00

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

w | tail -n +3 | cut -d " " -f1 | sort | uniq
1
ответ дан 7 August 2018 в 18:26

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

nice -n 19 your_calculation_command
1
ответ дан 7 August 2018 в 18:26

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

Для получения дополнительной информации см. man-страницу ubuntu finger .

4
ответ дан 7 August 2018 в 18:26

Я бы пошел с:

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

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

2
ответ дан 7 August 2018 в 18:26

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

Для получения дополнительной информации см. man-страницу ubuntu finger .

4
ответ дан 10 August 2018 в 07:09

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

ps au --no-heading | cut -d " " -f1 | uniq
0
ответ дан 10 August 2018 в 07:09

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

w | tail -n +3 | cut -d " " -f1 | sort | uniq
1
ответ дан 10 August 2018 в 07:09

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

nice -n 19 your_calculation_command
1
ответ дан 10 August 2018 в 07:09

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

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
ответ дан 10 August 2018 в 07:09

Я бы пошел с:

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

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

2
ответ дан 10 August 2018 в 07:09

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

Для получения дополнительной информации см. man-страницу ubuntu finger .

4
ответ дан 15 August 2018 в 19:08
  • 1
    в зависимости от настройки сети вы также можете использовать палец для запроса удаленных компьютеров, даже не заходя в систему (хотя современные брандмауэры могут заблокировать эту функцию). – ImaginaryRobots 1 June 2012 в 02:57
  • 2
    finger не установлен. Существует safe_finger, который терпит неудачу, потому что он, по-видимому, полагается на finger. – sebastiangeiger 1 June 2012 в 10:51
  • 3
    @sebastiangeiger safe_finger присутствует как часть пакета tcpd независимо от того, действительно ли установлен пакет finger (который предоставляет команду finger, для которой safe_finger является только оболочкой). Целесообразно использовать safe_finger при обращении к серверам finger на удаленных компьютерах (особенно тех, которые вы не администрируете сами и не должны вызывать проблемы на стороне клиента safe-finger). Если вы используете finger локально, не следует использовать safe-finger. – Eliah Kagan 1 June 2012 в 11:52

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

nice -n 19 your_calculation_command
1
ответ дан 15 August 2018 в 19:08
  • 1
    Творческий, мне нравится. – sebastiangeiger 1 June 2012 в 10:32
  • 2
    @sebastiangeiger Конечно, было бы еще лучше периодически (скажем, каждую минуту с пользователем crontab) проверять, есть ли локальный пользователь, входящий в систему, а если есть, уменьшите удобство, а если нет, увеличьте его (чтобы получить работу, даже когда есть другие удаленные пользователи или системный процесс, используя много CPU). Разумеется, для этого необходимо иметь надежный способ узнать, зарегистрирован ли локальный пользователь. (Вам также придется преодолеть проблему, с которой пользователи не root не могут renice обрабатывать процесс к более низкой, даже той, с которой она начиналась.) – Eliah Kagan 1 June 2012 в 11:09

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

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
ответ дан 15 August 2018 в 19:08

Я бы пошел с:

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

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

2
ответ дан 15 August 2018 в 19:08
  • 1
    Но вам, вероятно, нужно подумать о другом сценарии, когда люди покидают свои рабочие места, нажимая Ctrl + Alt + L, а не выходить из системы. Я делаю это! :) – Andrejs Cainikovs 31 May 2012 в 22:41
  • 2
    – sebastiangeiger 31 May 2012 в 23:44
  • 3
    @sebastiangeiger Как говорит Андрей Каиников, вы хотите считать пользователя локальным, если они заблокировали свою рабочую станцию? Вы не можете, так как они не правы, взаимодействуя с машиной. Но вы можете, потому что они все еще могут запускать программы и выполнять вычисления (или что бы они ни делали), которые занимают ресурсы ЦП, которые могут отвлекать ресурсы и / или убирать их ресурсы за счет вашей работы. Как и в случае с аналогичным вопросом, вы хотите, чтобы пользователи регистрировались и регистрировались локально? если они регистрируются локально на виртуальной консоли или только графически? – Eliah Kagan 1 June 2012 в 11:12
  • 4
    – sebastiangeiger 1 June 2012 в 13:14
  • 5
    – Eliah Kagan 1 June 2012 в 13:52

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

ps au --no-heading | cut -d " " -f1 | uniq
0
ответ дан 15 August 2018 в 19:08

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

На странице w man:

Покажите, кто входит в систему и что они делают.

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

$ 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
ответ дан 18 August 2018 в 21:55

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

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