Como copiar uma pasta do remoto para o local usando o scp? [fechadas]

2697

Como copiar uma pasta do host remoto para o local usando scp?

Eu uso sshpara entrar no meu servidor.
Em seguida, gostaria de copiar a pasta remota foopara local /home/user/Desktop.

Como faço para conseguir isso?

Slasengger
fonte
61
A pergunta do OP era se é possível copiar o arquivo do host remoto para o local enquanto o ssh'd para o host remoto . Não sei por que nenhuma resposta única respondeu corretamente à sua pergunta.
JeffDror
3
A premissa da pergunta está incorreta. A idéia é, uma vez logado no ssh, como mover os arquivos da máquina conectada de volta para o cliente conectado. No entanto, o scp não está ciente nem pode usar a conexão ssh. Está fazendo suas próprias conexões. Portanto, a solução simples é criar uma nova janela de terminal na estação de trabalho local e executar o scp que transfere arquivos do servidor remoto para a máquina local. Por exemplo, scp -i usuário tecla @ remoto: / remote-dir / remote-file / local-dir / local-file
jeffmcneill
12
A pergunta pode estar fora do tópico, mas também é a publicação mais bem classificada no Google. Bloquear significa que ninguém pode atualizá-lo para fornecer uma solução melhor.
Alex Harvey
3
Recentemente, fiz uma pergunta semelhante "um pouco mais profunda" sobre linhas de comando para outra ferramenta no SuperUser, e ela foi movida pelos mods para o StackOverflow. De qualquer forma, eu concordo com a afirmação dos mods: podemos MOVER isso para o SuperUser, por favor, desbloqueá-lo e obter mais respostas?
Nikhil VJ
3
Em geral, toda a reação "fora de tópico" no fluxo de pilha é a maior falha da plataforma. Martínetes superzelosas.
AdamC 9/07/19

Respostas:

4941
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Ao não incluir o '/' à direita no final do foo, você moverá o próprio diretório (incluindo o conteúdo), em vez de apenas o conteúdo do diretório.

De man scp(consulte o manual online )

-r Copia recursivamente diretórios inteiros

Gryphius
fonte
1412
Eu pesquiso isso o tempo todo. História em
cptloop #
10
Duas nice-to-sabe que eu encontrei: a -Cbandeira adiciona compressão e da -cbandeira permite que você passe em outros tipos de cifra para um melhor desempenho, como scp -c blowfish a@b:something . visto na resposta de dimuthu
Automatico
79
use -p para preservar os tempos de modificação do arquivo, permissões, etc! scp usuário-Pr @ ...
Ber
27
Esta resposta carece de explicação importante. Você terminará com Desktop/fooou terá o Desktop/allcontentsofFooGoherescp parece estranho às vezes para mim, isso faz uma coisa e depois outra
#
7
@Toskan com scp -r [email protected]:/path/to/foo /home/user/Desktop/você deve terminar Desktop/foo. Com scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ você você terminará com o conteúdo de fooin Desktope todos os subdiretórios fooespalhados em #Desktop
Ioannis
307

Para usar todo o poder do scp, você precisa seguir os próximos passos:

  1. Autorização de chave pública
  2. Criar aliases ssh

Então, por exemplo, se você possui este ~ / .ssh / config :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

você se salvará da entrada de senha e simplificará a sintaxe scp da seguinte maneira:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Além disso, você poderá usar o preenchimento de caminho remoto:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Atualizar:

Para habilitar bash-completion remoto você precisa ter bash-shell em ambos <source>e <target>exércitos, e funcionando corretamente bash-completion. Para mais informações, consulte perguntas relacionadas:

Como habilitar o preenchimento automático para caminhos remotos ao usar o scp?
Conclusão da guia Nome do arquivo SCP

Alexander Yancharuk
fonte
12
Não sabia sobre o arquivo de configuração, isso é incrível!
Dmastylo 01/03
A conclusão da guia não faz sentido, apenas é concluída a partir do host local para mim.
Bernhard
14
@ b.long A questão é "Como copiar a pasta remota foo para a área de trabalho local". Minha resposta é "scp -r prod: / path / foo / home / user / Desktop" . Espero que você seja capaz de ver relações.
Alexander Yancharuk
2
@ Bernhard Para mim é óbvio, porque eu estou usando o bash-shell. Obrigado por me indicar isso! Resposta atualizada.
Alexander Yancharuk 6/03/14
1
@Alexander Yancharuk: Obrigado pela resposta, isso é mais detalhado do que apenas cobrir a sintaxe.
Gladiator
217

Para copiar tudo de Local Local para Local Remoto (Upload)

scp -r /path/from/destination username@hostname:/path/to/destination

Para copiar tudo de Local remoto para Local (Download)

scp -r username@hostname:/path/from/destination /path/to/destination

Porta personalizada, em que xxxxé o número da porta personalizada

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Copiar no diretório atual de Remoto para Local

scp -r username@hostname:/path/from/file .

Socorro:

  1. -r Copie recursivamente todos os diretórios e arquivos
  2. Sempre use o local completo em /, Obter local completo porpwd
  3. scp substituirá todos os arquivos existentes
  4. hostname será o nome do host ou o endereço IP
  5. se for necessária uma porta personalizada (além da porta 22), use -P portnumber
  6. . (ponto) - significa diretório de trabalho atual, faça o download / copie do servidor e cole aqui apenas.

Nota: Às vezes, a porta personalizada não funciona porque a porta não é permitida no firewall, portanto, verifique se a porta personalizada é permitida no firewall para conexão de entrada e saída

Shiv Singh
fonte
1
Parece (pelo menos nas versões recentes do Raspbian Jessie e Ubuntu) que o scp usa -P (P maiúsculo) para porta, enquanto (estranhamente) o ssh usa -p (minúsculo).
Adam Plocher
-p é reservado para preservar "tempos de modificação, tempos de acesso e modos do arquivo original". Portanto, se você estiver usando isso para port, provavelmente não funcionará ;-) A menos que você tenha uma versão diferente que use p minúsculas de maneira diferente.
Adam Plocher
Com ssh, sim. Não com scp (eu assumo).
Adam Plocher
O que devo colocar se o diretório contiver um espaço?
Brethlosze
@hyprfrcb Use pwdobter a localização e usar mesmo
Shiv Singh
48

O que eu sempre uso é:

scp -r username@IP:/path/to/server/source/folder/  .

. (ponto) : significa current folder. então copie do servidor e cole aqui apenas.

IP : pode ser como um endereço IP 125.55.41.311ou como um host ns1.mysite.com.

Manish Shrivastava
fonte
9
Obrigado por apontar que .se refere ao diretório atual!
ericmjl
35

Melhor compactar primeiro o catálogo no servidor remoto:

tar czfP backup.tar.gz /path/to/catalog

Em segundo lugar, faça o download do controle remoto:

scp user@your.server.example.com:/path/to/backup.tar.gz .

No final, extraia os arquivos:

tar -xzvf backup.tar.gz
justi
fonte
10
"Melhor" depende muito dos dados que você está transferindo e do esforço de ssh no servidor para compactar / descompactar. E: você pode adicionar compactação ao scp com a -Cflag, como scp -C a@b:bigfile ..
Automatico
4
Isso me lembra o comentário feito por @cptloop! : D xkcd.com/1168
GoodSp33d 13/08/2015
22

E se você tem um monte de arquivos para baixar do local remoto e se não se importa muito com segurança, tente alterar a criptografia padrão scp (Triple-DES) para algo como 'blowfish'.

Isso reduzirá drasticamente o tempo de cópia de arquivos.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
fonte
2
De acordo com este post no blog você obter um desempenho ainda melhor com arcfourem vez de blowfish, mas tem falhas de segurança.
Automatico
20

Cenário típico,

scp -r -P port username@ip:/path-to-folder  .

explicado com uma amostra,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

Onde,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G
fonte
Obrigado pela resposta. -P para uma porta SSH específica foi útil para mim.
Redoff4
19

Vá para Arquivos na barra de ferramentas da unidade

insira a descrição da imagem aqui

Pressione Ctrl + le escreva [email protected]

O 192.168.1.103 é o host que você deseja conectar.

O exemplo aqui

insira a descrição da imagem aqui

Ronald
fonte
12

A questão era como copiar uma pasta do remoto para o local com scpcomando.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Mas aqui está a melhor maneira de fazer isso sftp: o SSH File Transfer Protocol (também Secure File Transfer Protocol ou SFTP) é um protocolo de rede que fornece acesso a arquivos, transferência e gerenciamento de arquivos em qualquer fluxo de dados confiável (wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Para obter ajuda sobre o sftpcomando, digite helpou ?.

Fulvio
fonte
12

Caso você encontre "Demasiadas falhas de autenticação" , especifique a chave SSH exata que você adicionou ao seu servidor svers ssh:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
kaiser
fonte
5

Não sei por que, mas tive que usar a pasta local antes da diretiva do servidor de origem. para fazer funcionar

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
fonte
1
Assumindo as permissões teve de usuário, você poderia fazer um caminho absoluto sem usarroot@
Jonathan