MOTH SSH por usuário

17

Quero exibir um banner (mensagem de boas-vindas) para usuários do SSH com uma mensagem de boas-vindas específica para cada usuário.

user260277
fonte

Respostas:

38

Você não especificou qual servidor SSH você está usando. Estou assumindo o OpenSSH.

Observe que o banner SSH e o MOTD são duas coisas diferentes.

Embora quase indistinguíveis em um terminal SSH, eles têm um comportamento diferente, por exemplo, em um cliente SFTP.


O MOTD é apenas um texto impresso em um terminal interativo. Portanto, não será (e não poderá) ser enviado para clientes SFTP, por exemplo (mais sobre isso mais tarde).

O MOTD é codificado /etc/motdno OpenSSH. Você pode ativar / desativar somente globalmente, usando a PrintMotddiretiva.

Em alguns sistemas Linux, no entanto, o PrintMotdestá sempre desativado e o MOTD é impresso pela pilha do PAM (usando o pam_motdmódulo). Nesse caso, você pode desativá-lo via /etc/pam.d/sshdou especificar um motd=caminho personalizado como parâmetro do módulo.


O banner SSH é um recurso especial do SSH 2.0, enviado em um pacote SSH específico (SSH2_MSG_USERAUTH_BANNER).

Assim, mesmo clientes não terminais, como clientes SFTP, podem processá-lo e exibir ao usuário. Veja como o banner é exibido no cliente WinSCP SFTP / SCP, por exemplo.

O banner SSH é configurável por usuário (ou grupo ou outro critério) no sshd_configuso Bannerdas Matchdiretivas e :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

Consulte também Desativar banner ssh para usuários ou ips específicos .


Obviamente, você também pode usar uma implementação personalizada para a mensagem / banner. Simplesmente imprima uma mensagem selecionada usando sua lógica personalizada a partir de um script de perfil global.

Assim como no MOTD, isso não funcionará para sessões não interativas (SFTP e similares).

Mais importante, além de não funcionar, você precisa imprimir a mensagem apenas para um terminal interativo. O que o OpenSSH faz automaticamente para o /etc/motd. Use um script de perfil global que seja executado apenas para um terminal interativo ou imprima a mensagem condicionalmente com base no valor da TERMvariável de ambiente.

Se você imprimir a mensagem para uma sessão não interativa, interrompa qualquer cliente que use um protocolo estrito, como o SFTP ou o SCP, pois o cliente tentará interpretar sua mensagem de texto como uma mensagem de protocolo, com falha grave.

Veja, por exemplo, a descrição desse problema na documentação do cliente WinSCP SFTP / SCP .

(Eu sou o autor do WinSCP)

Martin Prikryl
fonte
Oi tudo obrigado pela resposta, eu tenho a solução, por favor me corrija se eu estiver errado. Anexo estas linhas no arquivo / etc / profile. PGROUP = groups|awk '{print $1}'cat /etc/motd.${PGROUP} antes de adicionar esta linha, crio um arquivo de banner para cada usuário no diretório / etc. e arquivo como motd.root e motd.alex e este trabalho para mim.
user260277
Isso deve fazer também. Exceto conforme minha resposta, isso funciona apenas em um terminal interativo. Não funcionará para SFTP e similares.
Martin Prikryl
terminal interativo significa?
user260277
É um terminal que um interage com humanos (como oposta à sessão de SFTP, sessão SCP ou terminal não-interativo usado para a execução remota de alguma tarefa batch)
Martin Prikryl
Incluí alguns detalhes complicados sobre a implementação personalizada do banner.
Martin Prikryl
9

Você também pode usar o "$HOME/.ssh/rc"arquivo para arquivar o que deseja fazer

echo "echo Hello World" > /home/pluto/.ssh/rc
ssh pluto@localhost
Last login: Thu Dec 18 08:46:16 2014 from localhost.localdomain
Hello World

Portanto, você pode ter um ssh rc para cada usuário.

c4f4t0r
fonte
oi, eu tentei isso, mas ele dá a mensagem de erro .ssh / rc: 1: .ssh / rc: welcom: não encontrado.
user260277
foi minha culpa, eu fiz um erro de digitação, você precisa ecoam como no script bash normais
c4f4t0r
"Wolrd" também é um erro de digitação :)
simon
Recebo "stty: entrada padrão: ioctl inadequado para o dispositivo".
Pausado até novo aviso.
o que você tem em .ssh / rc?
C4f4t0r