Crie túneis SSH usando qualquer software

Crie túneis SSH usando qualquer software

Atualmente, temos alguns laboratórios onde todas as instâncias estão em sub-redes privadas, exceto Bastion VM. Portanto, os desenvolvedores devem criar um túnel SSH de seu laptop para o Bastion e criar outro túnel do Bastion para algum microsserviço, para que possam acessar a IU.

O processo é assim:

ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.

ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>

Agora, esta é uma tarefa bastante complexa/demorada para o uso diário, então eu estava pensando em configurar um software que pudesse ser configurado para fazer o mesmo com um clique.

eu descobriTubos Seguros, mas não tenho certeza de como usá-lo para meu propósito. Alguém pode sugerir uma alternativa para conseguir o que foi dito acima usando algum outro software?

Responder1

É complexo porque você está fazendo isso de uma forma complexa. O OpenSSH já possui mecanismos para simplificar esse tipo de conexões frequentes. (Observação:Esta postagem pressupõe que o desenvolvedor tenha chaves privadas paraambosconexões na máquina local, ou seja, o host bastião não possui algumas credenciais não copiáveis.)

Primeiro encontre uma maneira de compactá-lo em um comando SSH. Na verdade, isso inverte ligeiramente o tunelamento, já que o host bastião agora retransmite a conexão SSH e não as conexões da web.

ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>

Em versões muito recentes do OpenSSH, ele pode ser simplificado ainda mais usando -J/ JumpHostem vez do ProxyCommand manual:

ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>

Agora converta isso para opções ~/.ssh/config - identifique aquelas que são necessárias para se conectar ao próprio host bastião, aquelas que se aplicam aos hosts de serviço e aquelas que são comuns a todos eles (as seções 'Host' aceitam vários nomes e até curingas):

Host <bastion>
    User <user>
    IdentityFile <key>.pem

Host <hostname>
    User <user>
    IdentityFile <key>.pem
    #JumpHost <bastion>
    ProxyCommand ssh -W %h:%p <bastion>

Tendo isso implementado (que pode ser implantado centralmente), seu comando se torna apenas:

ssh -L <portX>:<microservice>:<mport> <hostname>

(Há também uma maneira de anexar automaticamente o domínio da empresa, por exemplo, se o servidor se chamar svc1.dev.example.com, então Hostname %h.dev.example.comou CanonicalDomains dev.example.compermitirá que você execute ssh svc1.)

Isso é tão simples quanto um método genérico pode ser – os quatro parâmetros restantes são inerentemente variáveis ​​(dependendo das necessidades de cada desenvolvedor), portanto, mesmo que você coloque uma UI gráfica no topo, o usuário precisará fornecer a mesma quantidade de informações. (Funciona com OpenSSH em qualquer sistema operacional.)

Dito isto, se omesmotúneis são estabelecidos sempre, eles também podem ser codificados em ~/.ssh/config ( -Lcorresponde a LocalForward) e o desenvolvedor só precisa ser executado ssh <hostname>.

(Praticamente qualquer sistema operacional capaz de executar OpenSSH também suporta scripts, geralmente escritos em sh/bash e/ou aliases de comando.)

informação relacionada