Como posso gravar diretamente em um pipe FIFO do Solaris sobre o ssh?

2

Eu tenho um servidor Solaris executando um processo que tem sua entrada e saída redirecionadas para pipes FIFO (fifo_in, fifo_out).

Como posso me conectar a esses dois canais sobre o ssh?

Eu gostaria de poder escrever para o pipe fifo_in sobre o ssh e fazer com que o processo do Solaris execute os comandos que ele recebe através do pipe, e então, é claro, receber a saída do processo via fifo_out.

Eu posso conectar-me ao servidor Solaris via ssh ou ftp. Não tenho certeza se o netcat está instalado, mas pelo que li on-line parece improvável.

Edit: Eu gostaria de fazer tudo isso a partir do python (no cliente) para que eu possa analisar os dados conforme eles chegam do processo do Solaris.

    
por delica 10.11.2018 / 01:00

1 resposta

0

Acontece que não é possível abrir pipes unix diretamente sobre o ssh, pois o Python gera um IOerror. Depois de alguma discussão, acabei fazendo o seguinte. Usando Python / Paramiko Eu executo esses comandos no servidor Solaris (via SSH):

mkfifo input
sleep 10800 > input & 

Isso cria o canal de entrada e 'sleep' garante que o tubo permaneça aberto (10800 é de 3 horas em segundos). Se você não usar sleep, o pipe será fechado após a primeira vez que você passar um lote de comandos para ele.

Eu executo o meu processo, enviando isto por ssh:

nohup process_name < input > output.txt &

Isso inicia o processo, anexa o pipe de entrada ao seu stdin e sua saída para um arquivo de texto simples output.txt. o nohup garante que o processo permaneça ativo se eu desconectar a sessão do ssh.

Nota: A princípio, pretendia usar um canal de saída também para a saída, mas, como acontece, não consigo abrir canais via SSH, não há vantagem em usar um tubo. Eu ainda uso um pipe para a entrada, pois isso garante que meu processo continue aceitando comandos conforme eu os envio.

A saída é fácil de ler a partir do output.txt, mas para a entrada eu envio cada lote de comandos (que eu queria que o processo executasse). Primeiro, o script Python cria um arquivo de texto com o novo lote de comandos chamado redir.txt e, em seguida, envia o conteúdo desse arquivo de texto para o canal:

cat redir.txt > input

Isso redireciona os comandos primeiro para o canal de entrada e, em seguida, o processo lê os comandos do canal.

Espero que isso ajude alguém lá fora.

    
por 15.11.2018 / 17:31