scp arquivos “pipe” via host intermediário

0

Este é um tipo de level-up de esta questão . Suponha que eu esteja no computador A e queira enviar arquivos para um computador C . Cada um de nós tem acesso separado a um host B . A e C não podem se comunicar diretamente e B não pode iniciar uma conexão com nenhum deles.

Existe uma maneira de canalizar um arquivo grande para o SSH e criar algum tipo de fluxo que eu possa informar ao usuário do computador C para se conectar? O arquivo é maior que o espaço disponível em B . Minha solução atual é split do arquivo grande, carregar cada segmento por vez, e quando o usuário em C terminar de baixar um pedaço me notifica, eu apago o pedaço e carrego o próximo.

    
por Ryan Kennedy 28.08.2013 / 21:21

2 respostas

1

Se eu entendi corretamente, você deseja enviar dados de A para C, mas nenhum computador pode se conectar ao outro, mas eles podem se conectar a B. B não pode se conectar a ninguém.

Uma solução está usando o encaminhamento de porta. C pode encaminhar de uma porta em B para sua porta SSH (porta 22):

ssh -R 1088:localhost:22

1088 é arbitrário, escolha uma porta que ainda não esteja em uso. Por padrão, essa porta está disponível apenas nessa máquina local, ou seja, somente os processos em execução em B podem se conectar a ela.

agora um usuário em A pode se conectar diretamente a C:

ssh B "ssh -p 1088 localhost"

Ou, por exemplo, este comando enviará um arquivo de A para C:

cat infile | ssh B "ssh -p 1088 localhost \"cat > outfile\""

Como alternativa, A pode ter encaminhar sua porta, permitindo que o usuário em C inicie a cópia.

Outra solução é usar pipes nomeados. Em B, execute:

mkfifo named_pipe

Em seguida, você pode enviar dados para o pipe com:

cat infile | ssh B "cat > named_pipe"

Este comando irá travar até que alguém abra a outra extremidade do tubo e leia os dados dele. Por exemplo, o usuário em C pode fazer:

ssh B "cat named_pipe" > outfile

Isso enviará o arquivo de A a B para C.

    
por 28.08.2013 / 22:57
0

Sim, você pode criar um canal nomeado para eles usarem. Certifique-se de criar primeiro o pipe, conecte-se a partir do computador C e comece a transmitir para ele.

    
por 28.08.2013 / 22:49

Tags