Como posso redirecionar usuários SSH para outro login SSH?

5

Eu tenho uma pessoa que precisará acessar meu servidor SSH, mas quero que eles tenham acesso limitado aos programas. Tudo o que eles deveriam estar usando é o ssh, para logar em outro servidor. Meu servidor é um ponto de acesso para outro servidor. Eu não quero que este usuário execute programas diferentes do programa ssh que eles precisam para entrar na outra rede.

O ideal é que, quando eles fizerem o login, sejam redirecionados para outro login SSH e não tenham outra opção imediata para fazer qualquer outra coisa.

Nenhum usuário de SSH tem permissões de root.

Como posso configurá-lo? Eu estou pensando que posso fazer isso com seus arquivos bashrc. Vou escrever um script de login secundário que é executado quando eles fazem login. Existe uma maneira de um usuário fazer login em um servidor SSH e ignorar seu arquivo bashrc no login? Existe uma maneira melhor que eu deva considerar?

    
por j0h 18.07.2015 / 04:16

4 respostas

11

Considere o uso de uma diretiva ForceCommand em sshd_config . Por exemplo, eu uso estes para forçar grupos de usuários a um conjunto de servidores:

Match Group group1
       ForceCommand ssh -t group1.fqdn

Match Group="*,!local,!group2,!root"
       ForceCommand ssh -t group3.fqdn

Você pode usar:

Match User foo
    ForceCommand ssh -t target-host
    
por muru 18.07.2015 / 04:56
2

Você pensou em editar o arquivo bashrc. Eu daria uma olhada em limitar seu acesso a todos os comandos do bash além do ssh dessa maneira. Este link tem boas informações.

Outro pensamento é configurar uma passagem ssh através de um túnel sem acesso a um login. Este link pode ser útil bem. Isso pode ser mais fácil de configurar.

    
por Carl Trask 18.07.2015 / 04:51
2

Simplesmente defina o shell de login do usuário para um shell script em vez de bash ou sh contendo a sintaxe ssh para o segundo endpoint. Todos os logins, a menos que eles definam explicitamente um shell com -s na sintaxe ssh, redirecionariam conforme solicitado.

Eu posso sair das limitações do BASHRC por vários métodos. Se você espera que eles sejam maliciosos, certifique-se de que eles não podem especificar o shell alternativo no login.

Capture o sigint do usuário para que eles não possam Ctrl + C fora e marque a saída de ssh para o código de saída 0, caso contrário, saia completamente ou tente indefinidamente. Sua escolha.

    
por Abyzl 18.07.2015 / 09:18
0

Você pode fazer isso de forma um pouco transparente, forçando o usuário a usar um ProxyCommand localmente, tratando seu próprio servidor como um host de bastião do SSH .

No seu servidor (o bastião), restrinja o usuário a nc da seguinte forma em sshd_config :

Match User restricted_usr
  ForceCommand nc -w 600 restricted_usr_vm 22

No cliente (assumindo OpenSSH ) em ~/.ssh/config :

Host myserver
  ProxyCommand ssh bastion nc -w 600 restricted_usr_vm 22

(Usuários do Windows podem usar proxies ssh via PuTTY usando o PuTTY's plink ).

No entanto, graças ao seu ForceCommand , tenho certeza que o comando ssh é ignorado; ProxyCommand ssh bastion I am a bannana deve ter o mesmo efeito. Uma conexão direta (sem ProxyCommand ) do usuário resultará em um despejo SSH bruto para restricted_usr_vm.

Como mencionado em um comentar para outra resposta aqui , ForceCommand dificultará muito o gerenciamento do acesso por chave SSH ao host de bastiões. Posso pensar em duas soluções fáceis: (1) Instale uma chave SSH sem senha para esse usuário no bastião que concede acesso ao host de destino e tenha o crontab desse usuário no bastião executando scp restricted_usr_vm:.ssh/authorized_keys ~/.ssh/ ou (2) Crie um formulário web (como o do GitHub) para permitir o upload desse arquivo. (3) O NFS também pode funcionar, mas eu não gosto muito dele porque o diretório .ssh pode ser comprometido por alguém com root (ou o mesmo UID) em qualquer sistema que o monta.

Postei uma resposta muito semelhante (com mais detalhes sobre o ProxyCommand) para a muito semelhante pergunta ServerFault Proxy SSH baseado em nome de usuário .

Eu gosto muito mais do que ForceCommand ssh -t restricted_usr_vm porque ele lida melhor com timeouts e ssh -t é meio desajeitado (e, talvez até agora, às vezes não confiável). Eu também estou supondo que coisas como scp não funcionarão através deste método enquanto elas funcionarão perfeitamente via ProxyCommand .

    
O
por Adam Katz 23.07.2015 / 01:43