Como usar tubos SSH no Linux
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.cat
more
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á”.
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:
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:
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.
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:
Imprimindo texto em um console remoto
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:
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.
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