Transferindo arquivos por SSH [fechado]

461

Estou usando SSH em um servidor remoto na linha de comando e tentando copiar um diretório na minha máquina local com o scpcomando No entanto, o servidor remoto retorna esta mensagem de "uso":

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Eu gostaria de poder transferir arquivos nas duas direções. Pelo que li, pensei que o comando acima funcionaria para download e scp -p [localpath] [remotepath]upload?

lagosta binária
fonte

Respostas:

735

Você precisa de scpalgo em algum lugar. Você tem scp ./styles/, então você está dizendo cópia segura ./styles/, mas não para onde copiar.

Geralmente, se você deseja fazer o download, ele irá:

# download: remote -> local
scp user@remote_host:remote_file local_file 

onde local_filepode haver um diretório para colocar o arquivo no qual você está copiando. Para fazer o upload, é o oposto:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Se você deseja copiar um diretório inteiro, precisará -r. Pense em scpcomo gostaria cp, exceto que você pode especificar um arquivo com user@remote_host:file, bem como apenas arquivos locais.

Editar: conforme observado em um comentário, se os nomes de usuário nos hosts locais e remotos forem os mesmos, o usuário poderá ser omitido ao especificar um arquivo remoto.

Lemnisca
fonte
2
Observe que, se o usuário for o mesmo no host remoto e no host local, o nome de usuário poderá ser omitido: scp hello.c myserver.net:~/projects/
strager
Sim, é verdade, vou adicionar uma observação sobre isso. Eu incluí o usuário porque os exemplos que eu dei sempre funcionarão. :)
lemnisca 5/08
Estou tendo dificuldades com isso ... isso está correto? scp C: \ filename.txt server1 @ server2: home
Vincent
Por favor, adicione formatação em negrito em "donload" e "upload".
kursus
2
"naturalmente" (digo naturalmente porque acabei de desperdiçar 15 minutos com isso), você não deve estar conectado ao host remoto enquanto tenta "fazer o download" para o local, porque se estiver executando o código a partir de uma instância remota, "local" ser interpretado como o "remoto", se você entende o que quero dizer. Portanto , não execute o ssh primeiro.
PatrickT
164

Se estiver copiando para / da máquina da área de trabalho, use o WinSCP ou, no Linux, o Nautilus suporta o SCP por meio da opção Conectar ao Servidor.

O scp só pode copiar arquivos para uma máquina executando o sshd; portanto, você precisa executar o software cliente na máquina remota daquele em que está executando o scp.

Se estiver copiando na linha de comando, use:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

ou

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile
JeeBee
fonte
4
Você é o cara. Implantei um blog em menos de 10 segundos sem nenhuma instalação adicional no lado do servidor!
PM
2
Isso funcionou perfeitamente. Eu usei o msysgit no cmd, pois possui scp e ssh.
Ibn Saeed
3
Isso funcionou perfeitamente. Eu usei scp * usuário @ host: path / / a /, onde
Bastin Robin
3
Essa deve ser a melhor resposta.
gsamaras
3
Obrigado pela sugestão do WinSCP. Caminho mais fácil do que tentar escrever todos os comandos manualmente ...
Brian Leishman
23

Você precisa especificar a origem e o destino e, se desejar copiar os diretórios, deverá procurar a opção -r.

Então, para copiar recursivamente / home / user / o que for do servidor remoto para o diretório atual:

scp -pr user@remoteserver:whatever .
Ken
fonte
19

Não, você ainda precisa scp [from] [to]seguir o caminho que está copiando

A diferença é que você precisa scp -p server:serverpath localpath

Gareth
fonte
8
qual é o propósito de -p?
Qinjie
1
De man scp: preserva os tempos de modificação, os tempos de acesso e os modos do arquivo original.
pjmil
4
Para ser claro, -papenas é incluído aqui porque o OP incluiu a bandeira na pergunta original. Não é de qualquer forma relevante para a resposta
Gareth