stdout
em um servidor CentOS precisa ser canalizado para stdin
outro servidor CentOS. Isso é possível?
Atualizar
ScottPack, MikeyB e jofel têm respostas válidas. Concordei com a resposta de Scott porque, embora minha pergunta não especificasse a segurança como um requisito, é sempre bom estar seguro. No entanto, as sugestões dos outros dois companheiros também funcionarão.
Respostas:
Este é um sim descarado.
Quando se utiliza
ssh
um comando em um servidor remoto, ele executa algum tipo de redirecionamento interno de entrada / saída. Na verdade, acho que esse é um dos recursos sutilmente mais agradáveis do OpenSSH. Especificamente, se você usarssh
para executar um comando arbitrário em um sistema remoto, o ssh será mapeadoSTDIN
eSTDOUT
para o comando que está sendo executado.Para fins de exemplo, vamos supor que você deseja criar um tarball de backup, mas não deseja armazená-lo localmente. Vamos dar uma olhada nessa sintaxe:
Estamos criando um tarball e escrevendo-o para
STDOUT
coisas normais. Como estamos usando o ssh para executar um comando remoto, o STDIN é mapeado para oSTDIN
decat
. Que então redirecionamos para um arquivo.fonte
netcat
nas duas extremidades, é um ótimo canal de comunicação simples e fácil.tar cf - /path/to/dir | nc 1.2.3.4 5000
em um servidor,nc -l -p 5000 > backupfile.tar
por outro.Uma maneira conveniente de canalizar dados entre hosts, quando você não precisa se preocupar com a segurança por cabo, está usando
netcat
nas duas extremidades da conexão.Isso também permite que você os configure de forma assíncrona:
No "receptor" (realmente, você terá uma comunicação bidirecional, mas é mais fácil pensar assim), execute:
E no "remetente", execute:
fonte
Uma ferramenta muito poderosa para criar conexões uni e bidirecionais é
socat
. Para uma breve olhada nas possibilidades, veja os exemplos em sua página de manual .Ele substitui
netcat
completamente as ferramentas similares e oferece suporte para conexões criptografadas ssl. Para iniciantes, pode não ser simples o suficiente, mas é pelo menos bom saber que existe.fonte
TL; DR
As coisas só ficam um pouco mais complicadas quando você tem um servidor bastião que deve ser usado.
Você pode passar
ssh
como o comando da seguintessh
maneira:cat local_script.sh | ssh -A usera@bastion ssh -A userb@privateserver "cat > remote_copy_of_local_script.sh; bash remote_copy_of_local_script.sh"
Cuidado com pseudo-terminais
Observe que o ponto de maior importância aqui é que
ssh
, como a maioria das ferramentas, tratastdout
estdin
corrige por padrão.No entanto, quando você começa a ver a opção como
Disable pseudo-terminal allocation.
eForce pseudo-terminal allocation.
pode ser necessário fazer uma pequena tentativa e erro. Mas, como regra geral, você não deseja alterar otty
comportamento, a menos que esteja tentando corrigir lixo ilegível / binário em um emulador de terminal (o que um humano digita).Por exemplo, eu costumo usar
-At
para que o agente ssh da minha estação de trabalho seja encaminhado e para que a execução remota do tmux não seja binária (assimssh -At bastion.internal tmux -L bruno attach
). E, para docker também (assimsudo docker exec -it jenkins bash
).No entanto, esses dois
-t
sinalizadores causam dificuldades para rastrear a corrupção de dados quando tento fazer algo assim:fonte
Tente colocar sua chave pública ssh em outro host apenas com um comando
fonte
Acho que é o mais fácil, depois de configurar nenhum handshake de senha entre servidores para o usuário, você está executando o comando como:
Descomprimido
Compressão em tempo real
fonte
ssh
já estiver configurado para compactação.Compression
pode ser definido em qualquer um dos arquivos de configuração, uma verificação rápida para verificar se hássh -v localhost exit 2>&1 | fgrep -i compress
alguma saída (AFAIK não há opção para despejar a configuração conforme o ssh a leu).tar
possui um-C path
sinalizador que funciona para os comandosc
ex
. Você não precisa colocar umcd
comando separado lá. (Mas é bom notar que você pode executar mais de um único comando.)-C
é uma extensão GNU (embora agora também suportada por bsdtar e alcatrão Schilly)