SSH: Fornece fds adicionais de “pipe” além de stdin, stdout, stderr

12

Ao se conectar a um host com SSH, geralmente três "canais" são fornecidos entre host e convidado, para stdin , stdout e stderr .

Existe uma opção de linha de comando para criar encaminhamentos para descritores de arquivos adicionais ( 3 e adiante)?

Por exemplo, eu gostaria de fazer

ssh --forwardfd=10:3 remotehost 'echo test >&3'

que imprime "teste" para o descritor de arquivo aberto localmente.

    
por mic_e 31.08.2015 / 19:21

2 respostas

6

Você pode fazer isso usando o encaminhamento de soquete, que está disponível desde o openssh-6.7. Isso é algum tipo de tubo. Essa técnica é descrita, por exemplo, aqui: link

Você ganhará rota de duas direções para seus dados. Existe um exemplo com o mysql:

Proxy MySQL client connections on a remote server to your local instance:

ssh -R/var/run/mysql.sock:/var/run/mysql.sock \
    -R127.0.0.1:3306:/var/run/mysql.sock somehost 
    
por 31.08.2015 / 20:15
1

Tenho certeza que deveria ser possível. Eu só posso sugerir um hack onde você usa conexões ssh extras para cada um carregar outro par de descritores de arquivos. Por exemplo. o seguinte script de prova de conceito faz um primeiro ssh para executar um comando fictício (sleep) para conectar up local fds 5 e 6 para stdin e stdout remotos, presumindo que estes fds são os que você quer adicionar ao usual 0,1,2.

Então o ssh real é feito, e no controle remoto ele conecta os fds remotos 5 e 6 para o stdin e stdout do outro ssh.

Apenas como exemplo, este script passa uma página do manual gzipped através do controle remoto, que descompacta e executa através do homem. O stdin e stdout do ssh real ainda estão disponíveis para outras coisas.

#!/bin/bash
exec 5</usr/share/man/man1/ssh.1.gz 6>/tmp/out6 # pretend need 5 and 6

ssh remote 'echo $$ >/tmp/pid; exec sleep 99999' <&5 >&6 &
sleep 1 # hack. need /tmp/pid to be set

ssh remote '
  pid=$(</tmp/pid) 
  exec 5</proc/$pid/fd/0 6>/proc/$pid/fd/1
  echo start
  gzip -d <&5 | man /dev/stdin >&6
  echo stop
  kill -hup $pid
'
wait
less /tmp/out6
    
por 01.09.2015 / 15:48