SSH via múltiplos hosts ou bastiões

4

Atualmente, de acordo com o procedimento normal, temos um servidor de bastiões em cada sub-rede pública dentro de uma rede de nuvem e tentamos acessá-lo através da seguinte configuração -

Host webserverA
    User myuser
    Hostname 192.168.1.10
    ForwardAgent yes
    Port 22
    ProxyCommand ssh -q bastionA nc %h %p
    IdentityFile ~/webserver.pem

Existe uma maneira de eu estender este modelo para ter outro servidor bastion?

BastionB - > BastionA - > WebserverA?

O raciocínio é que eu gostaria de tratar isso como uma cadeia de confiança. Remova algo quando ocorrer um evento bastante ruim.

Por CoT, se um conjunto de usuários sair, podemos alterar o primeiro conjunto de chaves para que possamos bloquear o acesso deles.

    
por A23 09.09.2016 / 10:06

1 resposta

6

Método 1 - cebola (túneis aninhados)

Com o OpenSSH 7.3 e posterior:

Host webserverA
    ProxyJump bastionA,bastionB

O mesmo via linha de comando:

$ ssh -J bastionA,bastionB webserverA

Alternativamente (também com 7.3; não misture isto e acima):

Host webserverA
    ProxyJump bastionB

Host bastionB
    ProxyJump bastionA

Com versões mais antigas - praticamente idênticas (mas não copia automaticamente opções como ssh -v ):

Host webserverA
    ProxyCommand ssh bastionB -W %h:%p

Host bastionB
    ProxyCommand ssh bastionA -W %h:%p

Este método inicia todas as conexões localmente, configurando um túnel ssh -W para cada etapa. Portanto, a autenticação acontece localmente (o ForwardAgent e o GSSAPIDelegateCredentials não são necessários) e o seu local .ssh/config também se aplica a cada etapa. Do lado do servidor, apenas o suporte básico de "TCP forwarding" é necessário, mesmo quando se usa -W ou -L .

No entanto, cada camada adiciona sobrecarga extra, uma vez que acaba carregando SSH no SSH em SSH no SSH.

Observe que cada host, exceto o mais externo, lista um ProxyCommand através do servidor imediatamente antes dele. Se você tivesse 3 servidores, usaria [webserverA via bastionC], [bastionC via bastionB] e [bastionB via bastionA].

Método 2 - hop by hop

Host webserverA
    ProxyCommand ssh bastionA -A ssh bastionB -W %h:%p

Este método inicia conexões hop por hop, executando ssh em cada salto para se conectar ao próximo. Portanto, um agente ssh e ForwardAgent devem estar ativados (ou GSSAPIDelegateCredentials se você usar o Kerberos); quaisquer outras configurações especiais de .ssh/config devem ser copiadas para todos os hosts de bastiões.

Por outro lado, implica menos sobrecarga de protocolo (máx. duas camadas em cada etapa).

(Editar: adicionou -A para sempre solicitar o encaminhamento do agente.)

    
por 09.09.2016 / 10:34