Temos dois ambientes principais em questão:
Desenvolvimento e controle de qualidade
Cada ambiente possui dois servidores:
- Jump Box
- Servidor de aplicação
Para conectar-se ao servidor de aplicativos, você deve primeiro conectar-se à caixa de salto e, em seguida, SSH ao servidor de aplicativos.
Existem algumas regras em vigor, cortesia do firewall:
- Você DEVE se conectar ao servidor de aplicativos através da caixa de salto
- O servidor de aplicativos não pode se conectar a nenhuma caixa de salto
- As caixas de salto estão na mesma sub-rede e PODEM conversar entre si.
Nosso Problema
Temos muito conteúdo (670 GB) no DEVELOPMENT APPLICATION SERVER
e precisamos levar isso para o QA APPLICATION SERVER
.
Copiar esses dados para as caixas de salto não é uma opção porque eles não possuem a quantidade necessária de espaço.
Eu fiz algumas pesquisas e aprendi que poderíamos potencialmente fazer uma série de túneis através desses servidores para poder transmitir os dados diretamente de um servidor de aplicativos para outro através dos túneis. No entanto, o problema que não podemos conectar à caixa de salto do servidor de aplicativos.
Temos alguma opção? Isso está se tornando uma situação desesperadora, e o tempo é essencial. Não temos tempo para baixar os dados e enviá-los novamente. A cópia na rede nos servidores será rápida, pois é uma conexão de gigabit.
fonte
Respostas:
De longe, a maneira mais fácil é copiá-lo via scp. Além disso, essa sintaxe realmente funciona ao contrário de outras sugestões.
Você não pode superar essa sintaxe com facilidade. Ele permite copiar recursivamente, rsync ou o que você quiser, sem o incômodo de considerar tubos potencialmente complexos. Essa sintaxe é intuitivamente clara, será mais facilmente suportada pelos administradores de sistema que o seguem e não faz uso inútil do gato .
Na página do manual scp :
-3
cópias entre dois hosts remotos são transferidas pelo host local. Sem essa opção, os dados são copiados diretamente entre os dois hosts remotos. Observe que esta opção desativa o medidor de progresso.No exemplo abaixo
Aqui está um arquivo ~ / .ssh / config que configura o acesso direto da estação de trabalho aos servidores de aplicativos por meio do salto apropriado (também conhecido como servidor de bastiões).
Testando a presença do arquivo no servidor de destino, ele não estará lá.
Agora vamos copiar um arquivo do servidor de aplicativos de desenvolvimento para o aplicativo de controle de qualidade por meio da estação de trabalho.
Agora vamos verificar a presença do arquivo copiado no QA Application Server. Será lá desta vez.
Nota
Ao fechar uma conexão ProxyCommand, você verá a mensagem de aviso "Morto pelo sinal 1". Isso é SSH destruindo a conexão ProxyCommand e não é nada para se alarmar. Você pode se livrar dele adicionando
LogLevel Quiet
à estrofe de configuração do host do bastião.fonte
TUBOS!
Se a internet é uma série de tubos , o Unix é uma série de tubos - algo como:
Deveria trabalhar.
Se você precisar atravessar mais hosts, adicione mais pipes (e mais camadas aninhadas de
\
cotação com escape), conforme necessário. (Observe, no entanto, que se o pipeline / escape se torna tão complexo que você precisa desenhar um diagrama ou contar com os dedos para determinar quantas vezes você precisa dobrar os escapes , provavelmente é hora de admitir a derrota e configurar uma VPN adequada !)fonte
tar
. (Também em você não precisa ocat
nas fases intermédias do gasoduto -ssh
tem o prazer de comer stdin e retransmiti-lo A.cat
Só me faz sentir melhor e é um marcador para outros comandos úteis que você pode querer usar, comotee
.)VPN! NOW!
sobre eles ...user@host1
) em algum momento terá ocat ginormous-file
armazenamento total em algum momento? Ou os dados são enviados diretamente parauser@host2
? Ou é de alguma forma transmitido? Como isso étar
relevante? Eu acho que é relevante para a penúltima pergunta que fiz. Nenhuma dessas questões são retóricas btw ...Se bem entendi, você tem dois servidores de salto (jump-qa e jump-dev) protegendo dois servidores de aplicativos (app-qa e app-dev); os servidores de salto podem ssh um para o outro; nenhuma caixa que não seja o servidor de salto relevante pode ssh no servidor de aplicativos correspondente. Os servidores de aplicativos podem ssh para ninguém. Um arquivo deve ser transferido de app-dev para app-qa. Ambos os servidores de salto não têm espaço para uma cópia provisória dos dados.
Você pode resolver isso com o tunelamento ssh. Estabelecemos uma conexão com um servidor de aplicativos remoto, carregando um túnel remoto que se conecta de volta a uma porta não utilizada em seu servidor de salto. Configuramos uma segunda conexão de um servidor de salto para o outro, carregando um túnel que pega a extremidade pendente da porta remotamente remetida do túnel um e a envia para a porta ssh do outro servidor de aplicativos.
Configure os túneis (cada um desses comandos precisará ser executado em uma janela separada
jump-qa
):Agora você deve achar que no app-qa, você pode fazer
telnet localhost 2345
e obter o banner ssh do app-dev. Você pode copiar o arquivo de dados:fonte