SSH MOTD por usuário

14

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

    
por user260277 18.12.2014 / 07:59

2 respostas

34

Você não especificou qual servidor SSH 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 depois).

O MOTD é codificado para o /etc/motd no OpenSSH. Você pode ativar / desativar globalmente somente usando a diretiva PrintMotd .

Em alguns sistemas Linux, no entanto, o PrintMotd está sempre desativado e o MOTD é impresso pela pilha PAM (usando o módulo pam_motd ). Nesse caso, você pode desativá-lo por meio do /etc/pam.d/sshd ou especificar um caminho motd= personalizado como um 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, até clientes não terminais, como clientes SFTP, podem processá-lo e exibi-lo para o 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 outros critérios) no sshd_config usando o Banner e as diretivas Match :

Match User username1
    Banner /etc/banner_user1

Match User username2
    Banner /etc/banner_user2

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

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

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

Mais importante, não só não funcionará, você precisa ter certeza de 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 variável de ambiente TERM .

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

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

(eu sou o autor do WinSCP)

    
por 18.12.2014 / 08:33
8

Você também pode usar o arquivo "$HOME/.ssh/rc" 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

Então, você pode ter um ssh rc para cada usuário.

    
por 18.12.2014 / 08:57