Preciso transferir um arquivo entre dois computadores que não estão conectados à mesma rede. Eu tenho um terceiro computador que pode ver as duas redes através de uma VPN.
No terceiro computador, posso fazer:
scp root@firstcomputer:./file ./
E termine a transferência com a seguinte frase:
scp ./file root@secondcomputer:./
Mas não posso fazer isso em apenas uma linha, da seguinte forma:
scp root@firstcomputer:./file root@secondcomputer:./
A resposta ao erro é
ssh: connect to host secondcomputer port 22: No route to host
lost connection
Sei que provavelmente é porque o primeiro computador não consegue ver o segundo computador. É possível dar ao SCP um parâmetro que trate do 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 o segundo estão rodando Debian.
Responder1
Você deve poder usar um túnel SSH.
Supondo que você esteja tentando transferir um arquivo de um computador remoto ("remoto") para o seu computador local ("local"), estabeleça o túnel através do terceiro computador ("gateway") digitando isto no 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 é adequado se a rede remota for segura, mas se não for segura, você precisará estabelecer um túnel entre o local e o gateway e outro túnel entre o gateway e o remoto, ligando os dois por um número de porta comum.
Responder2
A opção scp -3 deve ser o que você está procurando. Para colocar no seu exemplo:
scp -3 root@firstcomputer:./file root@secondcomputer:./
Observe que a opção -3 foi introduzida pela primeira vez no OpenSSH 5.7, lançado no início de 2011.
Responder3
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, copiará novamente o arquivo para o computador secundário e, em seguida, limpará a si mesmo. Como você está usando o operador &&, cada comando só será executado se o comando anterior for bem-sucedido.