Se eu estiver logado via SSH em 2 servidores e quiser copiar alguns arquivos de um para o outro (por exemplo, configuração de um servidor antigo para um novo), qual é a maneira mais fácil de fazer isso?
Se eu estiver logado via SSH em 2 servidores e quiser copiar alguns arquivos de um para o outro (por exemplo, configuração de um servidor antigo para um novo), qual é a maneira mais fácil de fazer isso?
Respostas:
No servidor1:
scp <files> server2:/dest/dir/
Ou, se você tiver o rsync instalado:
rsync -azvu basedir/ server2:destdir/
Caso contrário, passe pelo alcatrão:
tar cf - -C srcdir | ssh server2 tar xf - -C dstdir
Os dois últimos copiam árvores de diretório inteiras. O primeiro ou mais arquivos em um diretório.
Em outras palavras, basta usar ferramentas de shell do primeiro para copiar diretamente para o segundo.
Se o tamanho total não for muito grande, pode-se usar esse pequeno truque.
tar -cz <filestocopy> | base64
base64 -d | tar -xzv
Como é que isso funciona?
Com duas sessões ssh abertas, a maneira mais rápida de copiar seria:
Use netcat (nc)
Sender/Source machine:
tar -czf - /source/dir | nc -l 2342
Receiver/Destination machine:
nc -w 10 sourcemachine 2342 | tar -C /target/dir -xz -
Use scp com criptografia menos segura. O padrão é blowfish geralmente, mas o arcfour é uma alternativa muito mais rápida.
scp -c arcfour mogga@flinflon:/home/users/mogga /dev/null
Eu costumo usar a segunda opção (simplesmente porque consigo me lembrar com mais frequência).
-p
opção (opção de origem) não deve estar lá no comando de destino.
-p source_port Specifies the source port nc should use, subject to privilege restrictions and availability. It is an error to use this option in conjunction with the -l option.
sudo
(bem, talvez o SSH de pipe-tar-through faça?). Mas é a maneira mais prática de transferir dados maiores.