ssh tunelamento somente acesso

28

É possível configurar o ssh (no linux) para permitir o acesso apenas ao tunelamento? Ou seja, o usuário pode configurar túneis, mas não pode obter um shell / arquivos de acesso?

    
por Second 20.08.2009 / 12:43

5 respostas

38

Sim, use apenas /bin/false como shell e instrua o usuário a iniciar o processo SSH de encapsulamento sem executar nenhum comando remoto (ou seja, o sinalizador -N para OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host
    
por 20.08.2009 / 13:00
9

No arquivo .ssh / authorized_keys do usuário, coloque algo como o seguinte:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Então, basicamente, você os controles estariam na frente da chave pública ssh do usuário, separados por um espaço. No exemplo, as conexões que usam a chave pública específica terão permissão para fazer o encaminhamento de porta SSH apenas para o servidor MySQL do 192.168.1.10 e para o servidor da Web 10.0.0.16, e não receberão um shell (no-pty). Você está perguntando especificamente sobre a opção "no-pty", mas os outros também podem ser úteis se o usuário só deveria fazer o encapsulamento para servidores específicos.

Veja a página man do sshd para mais opções para o authorized_keys arquivo .

Note que a experiência do usuário pode parecer um pouco estranha: quando eles aparecem, parecerá que a sessão está travada (já que eles não estão conseguindo um arquivo). Isso está ok. Se o usuário tiver especificado o encaminhamento de porta com, por exemplo, "-L3306: 192.168.1.10: 3306", o encaminhamento de porta ainda estará ativo.

De qualquer forma, experimente.

    
por 22.11.2011 / 03:26
5

Conceda ao usuário um shell que permita apenas que você efetue logout, como /bin/press_to_exit.sh

#!/bin/bash
read -n 1 -p "Press any key to exit" key

Dessa forma, ele pode ficar logado por quanto tempo quiser, com túneis ativos, mas sem executar nenhum comando. Ctrl-c fecha a conexão.

    
por 03.12.2012 / 03:16
3

Designe um shell que não permita que o usuário faça o login.

por exemplo,

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

impediria que eles obtivessem um aviso de shell e dessem a eles um tempo limite de 60 segundos - se não houver conexão ativa por 60 segundos, ele sairá e, assim, os desconectará completamente (aumente o número de acordo com os requisitos).

Eles não podem executar um comando remoto, porque esse shell não permite.

    
por 20.08.2009 / 13:06
1

Minha solução é fornecer ao usuário que somente pode ser o tunelamento, sem um shell interativo , para configurar esse shell em / etc / passwd para / usr / bin / tunnel_shell .

Basta criar o arquivo executável / usr / bin / tunnel_shell com um loop infinito .

Faça uso adicional da opção AllowGroups e Match Group .

Totalmente explicado aqui: link

    
por 26.07.2013 / 12:09