Como puxar um arquivo de um servidor usando scp?

31

Estou na máquina A e quero extrair um arquivo da máquina B.

A$ scp <myuserid>@hostB:<path of file in B> .

isso diz que:

scp: <path of file in B>: No such file or directory

Mas na máquina B, esse arquivo existe neste caminho.

O que está acontecendo de errado?

xyz
fonte
Esse é o formato exato do comando que você executou? Ou havia um nome de arquivo após o ':'?
Dtyler 12/10

Respostas:

43

Você não especificou nenhum arquivo: você deve adicionar o arquivo (com o caminho) após os dois pontos:

A$ scp <myuserid>@hostB:/absolutepath/file .

ou

A$ scp <myuserid>@hostB:relativepath/file .

para um caminho relativo ao seu diretório pessoal.

Se você não especificar um usuário diferente (ou seja, o usuário A e B são os mesmos), não precisará do @

A$ scp hostB:/path/file .
Matteo
fonte
2
Corrigi a formatação da pergunta, mas talvez sua resposta ainda seja válida. O problema pode vir de uma confusão entre caminhos absolutos e relativos (para casa).
Stéphane Gimenez
@ StéphaneGimenez agora que vejo a resposta editada que eu entendo. Parecia uma pergunta estranha :-)
Matteo
4
$ scp username@remoteip:remote_location_file /location/where/you/save

Isso funciona apenas quando você copia o arquivo. se você deseja copiar um diretório, use

$ scp -r username@remoteip:remote_location_directory /location/where/you/save

Opção que você pode usar sob sua demanda

-P port
Especifica a porta à qual se conectar no host remoto. Observe que esta opção é gravada com "P" maiúsculo, porque -p já está reservado para preservar os horários e modos do arquivo no rcp.

-p
Preserva os tempos de modificação, os tempos de acesso e os modos do arquivo original.

-r
Copia recursivamente diretórios inteiros.

-v

Modo verboso. Faz com que scp e ssh imprimam mensagens de depuração sobre seu progresso. Isso é útil na depuração de problemas de conexão, autenticação e configuração.

Rakib
fonte
11
O OP pediu para copiar um arquivo, não um diretório.
Contramodo #
2

use o caminho scp adequado

scp ssh://user@hostname/tmp/foo.txt .

fonte
1

Você pode especificar um caminho de arquivo que seja relativo ao diretório inicial ou um caminho de arquivo absoluto. Por exemplo, se foo.txtestiver em um diretório chamado docssob o diretório inicial e bar.txtestiver /var/tmp, você poderá

scp [email protected]:docs/foo.txt .
scp [email protected]:/var/tmp/bar.txt .

Observe que, se o nome do arquivo contiver caracteres especiais para o shell remoto (geralmente espaço em branco ou !"#$&'*;<>?[\]^`{|}~), será necessário escapá-los para o shell remoto, além de escapar para o shell local. Por exemplo, se o arquivo for chamado foo bar.txte estiver no seu diretório pessoal:

scp [email protected]:'foo\ bar.txt' .

Se você tiver dificuldades com arquivos que contenham caracteres de pontuação, tente usar em sftpvez de scptransferi-los. Ou use um método ainda mais conveniente, se você puder usar o FUSE : monte o sistema de arquivos da máquina remota usando sshfs e use comandos comuns de manipulação de arquivos.

mkdir host.example.com
sshfs [email protected]:/ host.example.com
cp host.example.com/path/to/file .
Gilles 'SO- parar de ser mau'
fonte
1

É possível fazer o SCP dos dois lados com facilidade, se houver o usuário e a senha da DMZ. Você está na sua máquina local: da DMZ à sua máquina Linux local (pull). Significa copiar abc.text dentro de folder2 para o seu PWD conectado atual.

scp user@111111:folder1/folder2/abc.txt .

Ele solicitará a senha

Isso é tudo

Agora você deseja enviar uma pasta para subpastas e arquivos da sua máquina local para a DMZ:

usr @ localmachine: ~ / abc / defs> pasta scp -r / usr @ 111111: vkrishna / docker /

novamente a senha será solicitada

: é a pasta raiz da máquina remota e vkrishna é uma pasta lá e novamente na subpasta docker. A pasta defs localmente tem uma pasta chamada "pasta" que queremos transferir completamente.

Curtir / abc / defs / folder

vimal krishna
fonte