Configuração Shell / SSH do Unix para permitir o encaminhamento de porta TCP sem mostrar um prompt de comando

2

Estou executando um Debian Linux. Eu gostaria de ter uma conta de usuário que é capaz de se conectar via SSH para TCP-forwarding apenas , sem um prompt de comando.

por exemplo, o seguinte funcionaria (a partir de um computador remoto):

ssh -D1234 user@myhost

mas nenhum prompt de comando apareceria.

Usar um shell como / bin / false ou / sbin / nologin é muito restritivo, pois nem permite que o usuário efetue login. Um shell que permite apenas os comandos "exit" ou Ctrl + D faria o trabalho .

Eu sei que é possível algo semelhante para permitir somente o SFTP, mas não consigo encontrar o equivalente para o encaminhamento do TCP.

Obrigado

    
por Raphael K 30.06.2013 / 18:29

2 respostas

5

Parece que você está procurando a opção -N :

-N      Do not execute a remote command.  This is useful 
        for just forwarding ports (protocol version 2 only).

Assim:

ssh -D 8080 -N [email protected]

Também é interessante a opção -f :

 -f      Requests ssh to go to background just before command execution.  
         This is useful if ssh is going to ask for passwords or passphrases, 
         but the user wants it in the background.  This implies -n. 
         The recommended way to start X11 programs at a remote site is 
         with something like ssh -f host xterm.

Se você quiser restringir quais conexões de entrada podem:

  • Configure um comando personalizado no seu arquivo authorized_keys (supondo que você esteja usando chaves ssh)
  • Altere o shell do seu usuário

Qual comando / shell você usa depende do que você deseja permitir. Por exemplo:

  • /bin/cat manterá a conexão aberta, mas não fará absolutamente nada
  • rssh permitirá que você personalize quais ações estão disponíveis
  • Um shell chroot jailed fornecerá uma personalização semelhante
  • bash pode ser executado no modo restrito ( rbash ), que permite executar somente comandos no PATH configurado. Não é infalível, mas vale mais que nada.
por 01.07.2013 / 05:53
0

Não tenho certeza se isso vai funcionar. Eu tenho um cluster onde eu quero que as pessoas trabalhem no front-end, mas que elas não são permitidas em nós computacionais. Todas as pessoas têm contas em todos os computadores, no entanto, os nós têm as seguintes linhas em /etc/profile :

if test "$TERM" != "linux" && test "$USER" != "root" ;then
  echo ""
  echo -e "\033[0;34m=======================================================================\033[0;39m"
  echo ""
  echo -e "\033[0;31m         Login to this host is allowed for administrator only.\033[0;39m"
  echo -e "            Please use \033[0;34mqueue\033[0;39m to submit your jobs instead"
  echo -e "    or \033[0;34m132.187.71.6\033[0;39m or  \033[0;34m132.187.71.7\033[0;39m to login into cluster front-end."
  echo ""
  echo -e "\033[0;34m=======================================================================\033[0;39m"
  echo ""
exit
fi

A parte com $TERM verifica se o login foi direto ( isto é, com ssh ) ou via sistema de enfileiramento. O último é permitido. Se você quiser que um usuário específico tenha permissão para fazer o login, você pode adicionar à declaração if && test "$USER" != "someuser"

    
por 30.06.2013 / 19:34