Como usar tubos SSH no Linux

Como usar tubos SSH no Linux
Uma fotografia de um homem trabalhando em frente ao computador.

Os pipes UNIX são um passo monumental no desenvolvimento de sistemas operacionais UNIX e semelhantes ao UNIX. Ele permitiu que os usuários executassem tarefas de computação complexas, vinculando a entrada e a saída de programas básicos. Este artigo estende isso mostrando como usar um pipe UNIX no Linux em uma rede com o protocolo SSH.

Compreendendo o pipeline Unix

Pipes no Unix (e por extensão, no Linux) são usados ​​para encadear programas e fazê-los funcionar juntos. Por exemplo, usando cat, você pode mostrar o conteúdo de um arquivo, mas se usar uma barra vertical (|), você pode encadear o < um comando i=3> ao comando para facilitar a leitura do arquivo.catmore

A ideia básica aqui é esta: program1 fileX | program2. No entanto, não se limita apenas a um arquivo e dois programas. A tubulação pode ser tão avançada quanto você precisar, com tantos modificadores quanto você puder imaginar.

Aqui estão algumas maneiras de fazer bom uso do pipe (|) em situações SSH.

Transferir diretórios compactados automaticamente

Uma das maneiras mais comuns de usar pipes UNIX é armazenar a saída de um programa em um arquivo em algum lugar do sistema local. Por exemplo, executar echo "Hello, MakeTechEasier!"| tee Hello executará o programa echo enquanto também armazena a string “Hello, MakeTechEasier!” dentro do arquivo “Olá”.

Um terminal mostrando um redirecionamento de pipe UNIX básico em uma máquina local.

Dito isso, você pode usar essa ideia para transferir diretórios entre dois hosts Linux. Para fazer isso, leia a pasta que deseja enviar usando tar e, em seguida, canalize-a para o seu daemon SSH:

Este comando agrupará sua pasta em um arquivo tar e a enviará para a saída padrão do comando. O pipe UNIX irá então ler esses dados e enviá-los para seu host Linux remoto usando SSH.

Você também pode reverter este comando para retirar seus arquivos de hosts remotos:

Enviando e recuperando arquivos de hosts remotos

Você também pode usar pipes e SSH para enviar arquivos individuais pela rede. Isso funciona usando cat como uma forma de carregar o conteúdo de um arquivo e enviá-lo por SSH:

O host remoto receberá o fluxo de saída do processo cat local e reconstruirá o arquivo como está.

Para recuperar um arquivo de um host remoto, você precisa inverter a ordem do comando e fornecer o caminho para o seu arquivo remoto:

Um terminal mostrando a transferência de arquivos individuais usando um canal SSH no Linux.

Fazendo backup e restaurando unidades remotamente

Semelhante ao envio de arquivos e diretórios, é possível fazer backup remoto de unidades inteiras no Linux com um pipe UNIX e SSH. Isso pode ser útil se você deseja criar backups externos rápidos e não tem uma unidade física sobressalente no momento.

Para fazer backup de uma unidade inteira, execute dd com a variável “if=” definida para a unidade que você deseja fazer backup e, em seguida, canalize-a para seu daemon SSH:

Reverter este comando também permite restaurar uma imagem de disco de uma máquina remota para um disco físico:

Além disso, esta sintaxe de pipe SSH também funcionará com partições de disco discretas. Por exemplo, se o seu sistema tiver uma partição /home em “/dev/sda4” você pode executar o seguinte comando para criar um backup dela:

Redirecionando a entrada de áudio para uma máquina remota

Um dos benefícios dos pipes SSH é que eles permitem interagir com máquinas remotas como se fossem um recurso local. Isso inclui a capacidade de acessar arquivos de dispositivos, como a entrada de áudio de um sistema.

Para fazer isso, execute um subshell ALSA remoto usando SSH e envie sua saída para seu daemon ALSA local:

Isso ouvirá o dispositivo de entrada de áudio padrão na máquina remota e reproduzirá o que estiver ouvindo em seu sistema. Dito isto, inverter os comandos enviará a entrada de áudio da sua máquina local para a saída de áudio do seu host remoto:

Um terminal mostrando um fluxo de áudio ativo usando canais SSH.

O canal ALSA SSH também funcionará quando você o combinar com outras ferramentas de reprodução de áudio. Por exemplo, você pode enviar a saída do registro de um canal SSH para o ffmpeg:

Streaming de vídeo ao vivo de uma webcam remota

Outro grande uso de canais SSH no Linux é a transmissão de feeds de vídeo ao vivo pela webcam. Assim como acontece com o áudio, isso permite que você aproveite as vantagens de um dispositivo de host remoto e renderize sua saída em sua máquina local.

Para transmitir a partir da webcam de um host remoto, execute o SSH com um subshell ffmpeg e depois canalize-o para um cliente de reprodução de vídeo em sua máquina local:

Este comando transmitirá a saída de vídeo bruta da primeira webcam em sua máquina remota.

Uma captura de tela mostrando um feed de vídeo de webcam ativo passando por um canal SSH no Linux.

Também é possível gravar as imagens da sua webcam remota em um arquivo separado. Você pode fazer isso enviando os dados do canal SSH para tee antes de redirecioná-los para o seu player de vídeo:

Além de áudio e vídeo, você também pode usar canais SSH para enviar texto bruto no TTY de uma máquina remota. Isto é útil se você deseja enviar mensagens de status para um sistema sem GUI.

Para começar, crie um pipe FIFO em sua máquina local:

Execute um comando de escuta tail com seu FIFO e envie sua saída para um daemon SSH:

Teste se o seu novo canal FIFO está funcionando na rede enviando dados de texto usando o comando echo:

Um terminal que mostra texto arbitrário no console TTY de uma máquina.

Canalizando dados remotos para uma área de transferência local

A maior desvantagem de uma área de transferência do sistema é que ela só funciona com a máquina local. Isso é um problema se você estiver trabalhando com vários computadores e quiser transferir dados sem criar arquivos temporários.

Uma maneira de corrigir isso é criar um canal SSH que possa ler e enviar um arquivo remoto diretamente para a área de transferência do sistema local:

Este comando irá se conectar à sua máquina remota, executar o utilitário cat e começar a ler o arquivo “ramces.txt”. Uma vez feito isso, ele enviará os dados remotos de volta para sua máquina local e os redirecionará para a área de transferência do sistema.

Um terminal mostrando a área de transferência da máquina local após um canal SSH.

Você também pode enviar a área de transferência atual do seu sistema como um arquivo em sua máquina remota usando o seguinte comando:

Aprender como enviar dados através de uma rede usando pipes UNIX e SSH é apenas o primeiro passo para entender como funcionam as redes de computadores. Descubra mais sobre sua rede rastreando para onde vão seus pacotes usando o Traceroute.

Crédito da imagem: Mikhail Fesenko via Unsplash. Todas as alterações e capturas de tela por Ramces Red.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *