Versões mais recentes do scp têm a opção -3
-3
Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts
Existem dois servidores que eu posso acessar com duas conexões VPN diferentes. Eu consegui ter ambos os VPN trabalhando ao mesmo tempo na minha máquina (um pouco de regras de roteamento).
Eu quero fazer um scp <remote1>:some/file <remote2>:destination/folder
do meu terminal de laptop. Mas quando eu tento isso, o comando scp
que é chamado em remote1 não pode encontrar remote2 porque eles não estão na mesma rede. É possível forçar o comando scp
a passar pelo meu laptop como um roteador?
Se eu tentar com o Nautilus (conecte-se ao servidor, ambos os servidores, copie e cole) ele funciona, mas eu gostaria de fazê-lo de um terminal.
Se você precisar de mais flexibilidade do que scp -3
,% plainssh
e pipes são divertidos.
Isso é equivalente a redirecionar o fluxo pela máquina local:
ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'
Você pode adicionar mais redirecionamentos de fluxo a qualquer momento, por exemplo cadeia de várias máquinas intermediárias, ou salvar uma cópia local do arquivo transferido como está sendo encaminhado.
Expandindo a resposta de @ Anko, você pode usar tar
para vários arquivos:
ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'
A compactação é totalmente opcional - seus dados podem não ser muito compactáveis ou grandes o suficiente para garantir a sobrecarga. Se a sua versão de tar
não suportar a opção -z
, direcione os gzip -c
e gzip -dc
, respectivamente.
PS: Cuidado com as versões de tar
que não eliminam as barras iniciais na extração (por exemplo, escreva para nomes de caminhos absolutos, se fornecidos).
Edit: -e none
não é necessário com pipes, porque um pseudo-terminal não está alocado.