SCP entre duas redes

12

Eu preciso transferir um arquivo entre dois computadores que não estão conectados à mesma rede. Eu tenho um terceiro computador que pode ver ambas as redes através de uma VPN.

Do terceiro computador, posso fazer:

scp root@firstcomputer:./file ./

E termine a transferência com a seguinte frase:

scp ./file root@secondcomputer:./

Mas não consigo fazer isso em apenas uma linha, como segue:

scp root@firstcomputer:./file root@secondcomputer:./

A resposta de erro é

ssh: connect to host secondcomputer port 22: No route to host
lost connection

Eu percebo que provavelmente é porque o primeiro computador não pode ver o segundo computador. É possível dar ao SCP um parâmetro que lida com o fato de que a máquina que executa o programa SCP é a única que pode ver os dois computadores?

A propósito, o terceiro computador é um Mac com Lion e o primeiro e segundo estão rodando Debian.

    
por JorgeO 26.07.2011 / 18:34

3 respostas

3

Você deve conseguir usar um túnel SSH.

Supondo que você esteja tentando transferir um arquivo de um computador remoto ("remoto") para seu computador local ("local"), estabeleça o túnel através do terceiro computador ("gateway") digitando isso em seu computador local :

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Então você pode executar uma quantidade ilimitada de comandos SCP neste túnel (ainda digitando no seu computador local):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

Acabei de testar isso na minha rede e funcionou perfeitamente.

O método acima é bom se a rede remota é segura, mas se não for segura, você precisaria estabelecer um túnel entre o local e o gateway, e outro túnel entre o gateway e o remoto, ligando os dois por uma porta comum número.

    
por 26.07.2011 / 20:18
20

A opção scp -3 deve ser o que você está procurando. Para colocar no seu exemplo:

scp -3 root@firstcomputer:./file root@secondcomputer:./

Note que a opção -3 foi introduzida pela primeira vez no OpenSSH 5.7, que foi lançado no início de 2011.

    
por 26.07.2011 / 18:46
1

Você pode tentar isso:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

Isso copiará o arquivo para o diretório / tmp no terceiro computador e, se for bem-sucedido, recopiará esse arquivo para o computador secundário e, em seguida, limpará a si mesmo. Desde que você está usando o & & operador, cada comando só será executado se o comando anterior for bem sucedido.

    
por 26.07.2011 / 18:49