Tentando imprimir o nome de usuário na mensagem do dia (MOTD)

2

Estou testando um script simples que imprime uma mensagem de boas-vindas aos usuários que estão fazendo login em um servidor.

O script:

#!/bin/sh
_user=$(whoami)
_hostname=$(hostname)
_currdate=$(date)

echo "#===================================================#"
echo "          Welcome $_user to $_hostname server"
echo "          Curr. time: $_currdate"
echo "          Have a nice day!"
echo " "
echo  "#==================================================#"

Estou salvando o script em /etc/update-motd.d / , para que a mensagem apareça após o login do usuário. O problema é que o var _user sempre aparece como " root " e não consigo encontrar uma maneira de obter o nome de usuário do usuário. Estou testando isso via SSH.

Alguém pode me ajudar? Obrigado! :)

    
por tzlima 04.10.2015 / 03:24

3 respostas

4

Você não pode. O motd é um arquivo global , compartilhado entre usuários (é / etc / motd), e atualizado apenas na reinicialização (e de vez em quando, eu acho). Portanto, não pode haver nada específico do usuário ou específico da sessão.

Em vez disso, adicione suas mensagens a /etc/profile para serem exibidas pelo shell:

if [ -t 1 ] && [ ! -f ~/.hushlogin ]; then
    echo "Welcome to $(hostname), $(whoami)!"
    echo "$(ddate). Have a nice day."
fi
    
por 04.10.2015 / 03:45
2

A resposta do Grawity está incorreta. Ele afirma que o motd é um arquivo global, mas o OP declarou claramente que ele estava trabalhando em /etc/update-motd.d /.

/etc/update-motd.d/ permite MOTDs gerados dinamicamente e pode executar scripts ou aplicativos reais.

Isso foi dito, eu estava enfrentando o mesmo problema que você. A questão é que, durante a execução do MOTD, os privilégios ainda não foram lançados na conta do usuário, portanto, todos os scripts são executados como raiz.

Consegui encontrar uma solução que funciona em máquinas Debian. Eu não tentei em outras distribuições. Qual a minha solução que recupera o nome de usuário da saída 'ps', como sshd mostra o nome de usuário, como:

root      4179  0.0  0.0  93984  5952 ?        Ss   10:44   0:00 sshd: johndoe [priv] 

Meu pequeno script 'pesquisa de volta' na árvore de processos para encontrar o processo que contém o nome de usuário.

PPID1='cat /proc/$PPID/status | grep PPid | awk '{ print $2 }''
PPID2='cat /proc/$PPID1/status | grep PPid | awk '{ print $2 }''
USERNAME='ps -x | grep $PPID2 | awk '{ print $6 }' |  sed "s/[[:digit:].-]//g"'

O nome de usuário agora está na variável $ USERNAME.

    
por 14.02.2017 / 09:53
0

O acompanhamento não funciona para logins locais, mas, novamente, minha mensagem não aparece em logins locais para mim e o OP está procurando por uma solução relacionada a SSH; então aqui está o encantamento mágico para capturar o nome de usuário do usuário mais recente para ter logado via SSH para uma variável dentro de um script motd.

_user="$(grep 'sshd' /var/log/auth.log | awk '/Accepted publickey for/{print $9}' | tail -1)"

Embora não tenha certeza do que será relatado se / quando dois ou mais usuários fizerem login ao mesmo tempo; então não confie nele por segurança ou privacidade.

    
por 10.10.2018 / 13:54