como baixar um fluxo usando ssh?

2

em uma máquina remota eu quero lançar um comando que lentamente produz um grande fluxo (compressão de fluxo) e ao mesmo tempo começar a baixar esse fluxo. Eu não quero primeiro salvar o fluxo em um arquivo remoto, pois leva tempo para produzir todo o conteúdo e depois leva tempo para baixá-lo. Eu quero comprimir e baixar em paralelo para economizar tempo. Eu posso ssh / scp para a máquina remota

eu vi: Como faço scp a saída (enorme) de um comando diretamente para uma máquina remota?

mas eu quero puxar, não empurrar

    
por piotrek 22.08.2016 / 11:53

2 respostas

6

Você pode fazer isso de maneira semelhante:

ssh -T [email protected] 'producing_command' > big.txt

Basta executar o comando de produção no servidor e gravar no arquivo local.

    
por 22.08.2016 / 11:59
1

Embora eu concorde com a resposta da saída da tubulação por meio do STDOUT e do SSH, gostaria de oferecer uma variação de perspectiva:

Você pode usar o SSHfs (um sistema de arquivos FUSE) na máquina remota para montar um diretório da sua máquina local e depois gravar nele. Se necessário, isso pode ser encapsulado através de uma conexão da sua máquina local para a máquina remota.

Exemplo A:

LOCAL$  ssh [email protected]
REMOTE$ sshfs [email protected]:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

Como resultado, a saída será gravada lentamente em / directory / on / localmachine / bigstreamfile

Se você não conseguir acessar a máquina local a partir da máquina remota por SSH direto (NAT sem encaminhamento de porta, CGNAT, firewalls, ...), siga-nos. Exemplo B:

LOCAL$  ssh [email protected] -R54223:localhost:22
REMOTE$ sshfs -p54223 user@localhost:/directory/on/localmachine /directory/on/remotemachine
REMOTE$ bigstreamcommand >/directory/on/remotemachine/bigstreamfile

O único requisito para o exemplo B funcionar é que você esteja executando um servidor SSH em sua máquina local. Você conecta o sshfs ao localhost: 54223, já que é um túnel reverso da máquina remota, redirecionando todas as conexões de volta através de sua conexão SSH inicial e ao servidor SSH em sua máquina local.

Talvez não seja tão simples, mas é muito mais flexível, no sentido de que você pode executar operações de arquivos arbitrárias a partir da máquina remota, diretamente no seu sistema de arquivos local. Eu não recomendo executar comandos que precisem ler muitos dados através disso, já que isso obviamente precisará ser enviado de sua máquina local para a máquina remota, que, em conexões residenciais , tende a ser lento. Escrever arquivos grandes em sua máquina local deve ser muito mais rápido, assim como a largura de banda de download é maior para conexões residenciais.

Para mais detalhes, por favor, releia e, em seguida, consulte man sshfs .

    
por 23.08.2016 / 12:30