Descobrir se existe um usuário local logado ao efetuar login no ssh

6

Eu preciso executar alguns cálculos em uma máquina que só posso acessar remotamente, mas também serve como uma estação de trabalho. Há muitos deles e eu quero escolher um "livre". Livre significa, neste caso, que ninguém está logado localmente.

Minha primeira tentativa foi o comando who , mas por algum motivo ele lista apenas usuários "selecionados" e não consigo descobrir como eles são selecionados. Próxima tentativa: ps aux | cut -d " " -f1 | sort | uniq : melhor mostrando um monte de demônios, mas também o usuário local que não foi exibido por who .

Minha solução atual é entrar e fazer ps aux | grep "gnome-session" , o que é melhor, mas ainda me dá muito lixo. O ideal é que eu esteja procurando por algo que eu possa incluir no meu perfil ssh que me avise sobre usuários locais (ativos) quando eu fizer login.

EDITAR:

  • Nem who nem w retornaram o usuário local. Isso é um comportamento inesperado?
  • Por outro lado, uptime me mostrou a quantidade certa de usuários (usuários de sistemas menos usuários locais e remotos, como o root)
  • finger não está instalado
por sebastiangeiger 31.05.2012 / 18:00

8 respostas

7

Use w

De w página de manual:

Mostre quem está conectado e o que está fazendo.

Exemplo de saída:

$ 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´
    
por pl1nk 31.05.2012 / 23:16
4

O comando finger está instalado ou, se não, poderia ser? Isso deve fornecer uma listagem de todos os usuários que estão conectados e de onde (ou seja, outra máquina ou diretamente na máquina) e também deve informar por quanto tempo esse usuário ficou ocioso.

Consulte a página manpage do ubuntu para obter mais informações.

    
por theabro 31.05.2012 / 22:29
2

Eu iria com:

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

Isso mostrará uma lista de usuários real . Se a lista estiver vazia - a máquina está no estado desconectado, esperando que alguém efetue login.
ps aux mostrará também alguns usuários do sistema, que você provavelmente não deseja ver.

    
por Andrejs Cainikovs 31.05.2012 / 19:38
1

Considere apenas definir a melhor gentileza para seus cálculos. Deve evitar sobrecarregar os recursos para qualquer outro usuário que possa estar logado.

nice -n 19 your_calculation_command
    
por geirha 31.05.2012 / 23:38
1

last

examina / var / log / wtmp e exibe um registro dos últimos usuários conectados, incluindo aqueles atualmente conectados.

    
por pl1nk 02.06.2012 / 01:16
1

Minha resposta para listar todos os usuários registrados, de maneira única.

w | tail -n +3 | cut -d " " -f1 | sort | uniq
    
por Eduardo Rolim 14.06.2016 / 14:18
0

Uma tentativa rápida e suja:

ps au --no-heading | cut -d " " -f1 | uniq
    
por david6 18.06.2012 / 10:56
0

Eu gosto deste:

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
    
por Adam 11.02.2014 / 16:13