Implementar o redirecionamento de SSH em um host remoto

0

Meu problema é semelhante ao descrito aqui . Eu tenho três anfitriões A, B e C.

A é o computador que recebo em casa.

B é um servidor que temos na Universidade que está conectada à Internet.

C é um computador no escritório da universidade. Conectado na mesma rede local com o servidor. Então eu posso SSH de A - > B e de B - > C, mas não de A - > C. Eu quero uma conexão direta de A para C.

Há uma ótima solução descrita aqui .

Mas meu problema é que a solução é aplicada em um host e eu preferi uma solução que eu possa colocar no host B porque eu quero facilitar para outros usuários que desejam a mesma conexão. Observo aqui que a maioria dos usuários são professores que não possuem conhecimentos de informática. Qualquer ajuda por favor.

    
por Erman 15.08.2016 / 18:52

3 respostas

2

Primeiro, aqui está uma solução melhor que a fornecida no link fornecido na pergunta, pois esse novo não tem dependências de ferramentas externas como netcat :

Host C
  ProxyCommand ssh -W %h:%p B

no .ssh/config do host A. Os usuários não precisam ter conhecimentos específicos de informática, eles só precisam ser informados. Qualquer pessoa pode colocar 2 linhas em um arquivo.

Se isso for realmente um problema, um comando específico pode ser adicionado ao arquivo .ssh/authorized_keys no host B:

command="ssh C" ssh-rsa <key_of_the_user_of_host_A>

Portanto, quando o usuário usa ssh B , em vez de iniciar um shell interativo no host B, o servidor SSH no host B executará automaticamente ssh C (consulte a página do manual sshd (8)). No entanto, isso impedirá qualquer registro direto no host B e qualquer outro comando SSH, como /bin/bash -l in ssh -t B /bin/bash -l , será ignorado. Como a man page diz:

The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable.

Portanto, pode haver algum espaço para melhoria, seja para executar o comando fornecido no host C, ou para executá-lo no host B sob algumas condições (também tenha cuidado com aspas, se considerar essa variável de ambiente). Um exemplo é:

command="ssh ${TTY:+-t} C ${SSH_ORIGINAL_COMMAND-$SHELL}" ssh-rsa <key>

que executa o comando fornecido no host C se houver um (e iniciará um shell interativo como de costume se não houver). Com isso, scp pode funcionar, mas na minha máquina ele falha com erros de "Permissão negada". Mas rsync funciona bem e pode ser usado como um substituto para scp se você tiver problemas com isso.

Importante. Não escolha uma solução que consista em abrir uma porta (necessariamente não privilegiada) no host B. Isso não funcionará porque as conexões com essas portas são bloqueadas pelo firewall do servidor. Universidade, ou isso introduzirá problemas de segurança, pois isso permitirá que os usuários ignorem a autenticação (com coisas como rastreamento) no host B através do servidor SSH na porta 22.

    
por 16.08.2016 / 00:13
1

no host B:

B$ ssh localhost -L 2222:C:22 -g

Durante a execução, todos podem se conectar ao host C via B: 2222 (porta tcp 2222)

Para uma solução permanente, você pode executar um screen no host B e deixar o comando ssh em segundo plano.

(você pode usar um software de redirecionamento tcp mais simples que o ssh para o host local: por exemplo, redirecionar)

    
por 15.08.2016 / 19:13
0

Uma solução de encaminhamento interativo que não requer a abertura de uma porta em B, mas uma em A, é a seguinte:

Em A:

ssh -fNL 2222:C:22 B

ssh -p 2222 localhost

Pode ser útil conhecer isso além da opção proxy de configuração (que funciona de maneira semelhante) @ vinc17 mencionada.

    
por 17.08.2016 / 23:37