Túnel SSH para usuário restrito com PuTTY e sem shell

Túnel SSH para usuário restrito com PuTTY e sem shell

então, já faz algum tempo que uso túneis SSH para restringir o acesso a sites internos ou partes de sites públicos e, como apenas os administradores tinham acesso SSH, tenho usado contas de usuário padrão não-root/sudo. Bem, agora que estou expandindo e tentando envolver os alunos das universidades locais para expandir seus projetos, eles precisarão começar a acessar algumas dessas páginas internas.

O servidor proxy é uma caixa CentOS 6.4, com SELinux habilitado, e não executará nenhum outro serviço além do proxy. Pretendo eventualmente configurar uma VPN completa, mas neste caso é simplesmente para permitir o acesso a determinadas máquinas com uma lista de permissões de IP, em vez de acesso total à rede interna.

Eu examinei todos os métodos para configurar um proxy SOCKS com contas de usuário com coisas como /bin/false etc, mas também

A) eles assumem que apenas uma única porta ou host está sendo encaminhada (enquanto neste caso eu tenho um conjunto de instâncias VPS que mudarão sob demanda nas configurações de rede), ou

B) que um cliente SSH normal está em uso em vez de algo como PuTTY (por mais que eu adorasse forçar todos os alunos a usar uma VM ou instalar o Linux diretamente, isso não é exatamente uma opção, já que a escola usa PuTTY em sua engenharia hardware para uso dos alunos).

Aqui está o que descobri até agora: Se um cliente ssh normal for usado, posso definir o shell do usuário como /bin/false e o usuário pode especificar o comando -N ao configurar o proxy SOCKS, mas infelizmente para usuários do PuTTY isso não parece funcionar (pelo menos não consegui fazê-lo funcionar).

Quando o PuTTY abre um túnel por meio das opções de túnel padrão, ele precisa abrir um shell que se desconecta imediatamente após o login, pois o usuário possui um shell /bin/false. Se eu especificar o argumento "no shell or command" nas configurações de SSH, as opções de proxy não parecem estar configuradas. Se eu tentar configurar o proxy nas opções SSH para comandos remotos, ele ainda não será executado, a menos que eu permita um shell ou outros comandos nas opções.

Perguntas relacionadas que encontrei, mas não se encaixam perfeitamente:

Crie túneis SOCKS com PuTTY e nologin (este funcionaria tecnicamente, mas o shell é simplesmente um comando sleep que é executado por muito tempo, e estou preocupado com o escape dele. Prefiro ter um noshell verdadeiro do que um shell que simplesmente trava por razões de segurança )

https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding (Isso não funciona porque exigiria que o usuário usasse uma instalação verdadeira do ssh, e programas como o PuTTY não funcionariam). Também preciso que eles possam acessar páginas da Web, embora presumo que poderia simplesmente especificar PermitTunnel para a conta, em vez de permitir apenas uma porta específica.

"noshell" para usuários de proxy ssh (Este não funciona para o PuTTY pelos motivos que afirmei acima em relação à necessidade do PuTTY ter comandos habilitados para configurar o proxy SOCKS)

Alguma sugestão? Eu poderia facilmente estar faltando alguma coisa, mas não tenho certeza.

-Jim

Responder1

Eu encontrei uma solução (em um post aqui sem uso de tags como nologin ou noshell, mas sim um truque simples para usuários do Windows, mas fiz funcionar para mim sem um shell).

Criei um script em lote usando a resposta desta postagem que pode executar uma instalação padrão do PuTTY e configurar um túnel sem executar comandos que causariam a desconexão do shell:

Túnel SSH simples e morto para meus usuários do Windows

"C:\Program Files (x86)\PuTTY\plink.exe" -v -N -D localhost:8080 proxy@remote_host

Como isso faz com que os usuários do Windows com PuTTY possam acessar o túnel, posso continuar usando o shell da conta como /bin/false

Postado aqui para quem possa estar em situação semelhante e para resolver o tópico. Se houver outras soluções, adoraria ouvi-las!

Agora só preciso tentar fazer isso funcionar com meu sistema de dois fatores baseado em push SSH que estou implementando em todos os meus sistemas, mas isso é algo para trabalhar depois que todo o resto estiver funcionando.

-Jim

Responder2

Acabei de ver que o PuTTY tem a seguinte opção e pode ser o que você procura: Conexão->SSH->Não iniciar um shell ou comando

Se ativado, a conexão é feita, não há mais exibição no console, mas é mantida ativa e o túnel funciona bem. Espero que ajude.

informação relacionada