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
É 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?
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.
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.
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.
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