Como posso canalizar a entrada de uma sessão SSH para outra? Usando o fifo?

3

Há algum tempo, vi um artigo sobre o piping de mensagens de uma janela do console para outra usando fifo ?

Eu não usei isso antes e não consigo encontrar meu link para o artigo. Como posso configurar isso?

Eu gostaria de ter dois consoles abertos para registro e ter um para exibir as mensagens de registro (tempo real) que são enviadas do outro.

    
por cwd 11.11.2011 / 04:35

2 respostas

6

Quando um pipe nomeado é criado, via mkfifo (ou qualquer outra coisa que você possa fazer), ele cria um "arquivo" de pipe que permanece no lugar até ser removido (ou, em alguns casos, até que sua máquina seja reinicializada, se você se esquece de removê - lo). Você pode criar seu próprio pipe nomeado com o mkfifo simplesmente, pois são necessários poucos argumentos, assim:

host # mkfifo -m 777 /tmp/corncob

Isso é tudo o que é preciso para criar o pipe nomeado / tmp / corncob. O sinalizador -m, usado para definir as permissões, não é necessário. Geralmente, se você não incluí-lo, o conjunto de permissões padrão para um novo pipe nomeado será o padrão para o seu sistema. Como uma outra nota lateral, você também pode passar o sinalizador -m e definir permissões alfa, em vez de octal, como:

host # mkfifo -m a=rwx /tmp/corncob

para criar exatamente a mesma coisa. Você pode excluir o pipe nomeado da mesma forma que exclui um arquivo. rm, e ele se foi.

Uma coisa que você deve notar sobre pipes nomeados é que eles geralmente (até onde eu vi) só são capazes de passar completamente um fluxo de entrada / saída por si mesmos de cada vez. Ou seja, se você tiver um processo enviando entrada para o pipe nomeado e dois processando a leitura a partir dele, apenas um dos processos de leitura receberá a saída. Deve-se notar, também, que, se tal situação existir, uma vez que o processo original que está recebendo a saída sai, o outro processo começará a receber a saída do canal nomeado (se ainda estiver tentando ler a partir dele). Isso foi uma frase muito longa ou estou apenas digitando rápido? ;)

Um exemplo do que eu quero dizer abaixo:

host-term1 # while :;do echo a b c d e >/tmp/corncob;sleep 15;done

host-term2 # tail -f /tmp/corncob
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e

host-term3 # tail -f /tmp/corncob

host-term2 # ^C

host-term3 #
^C
a b c d e
a b c d e
a b c d e
a b c d e

via

    
por 11.11.2011 / 06:00
3

Use o comando mkfifo para criar uma fila fifo, canalizar a saída para ela (use tee em vez de um redirecionamento se quiser saída em ambos) e apenas cat no outro terminal. Apenas note que os blocos fifo, então você terá que ter certeza de que a maneira que você está usando não parará o programa.

    
por 11.11.2011 / 04:56