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
/ JumpHost
em 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.com
ou CanonicalDomains dev.example.com
permitirá 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 ( -L
corresponde 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.)