Como copiar (ou mover) arquivos da máquina remota para a máquina local?

5

Eu SSH tunelou da minha máquina Ubuntu local para uma máquina Ubuntu remota e eu quero copiar / mover arquivos do Ubuntu remoto para o local.

Eu preciso fazer isso dentro da sessão SSH (por exemplo, dentro do Ubuntu remoto).

Isso não funcionou:

scp [remote-source] [local-destination] # Which is actually:
scp /home/user/files_to_depart/file1.txt /home/user/files_that_arrived/file1.txt

Como isso pode ser feito de outra maneira?

    
por JohnDoea 10.04.2017 / 02:17

4 respostas

8

A resposta da nullmeta é completamente válida, e talvez a nullmeta seja editada para fornecer o esclarecimento que você está procurando. Estou postando uma solução separada completamente para explicar a situação em que pode ser difícil por causa da estrutura da rede (pense no firewall NAT) simplesmente voltar para o sistema local.

Digamos que você tenha dois computadores, ComputerA e ComputerB. ComputerA é sua estação de trabalho local. ComputerB é uma máquina remota que você pode acessar via ssh.

Cenário 1: se o ComputerA não estiver por trás de um firewall NAT

Esta é uma solução rápida e fácil, combinando scp e ssh (scp executa uma cópia segura usando protocolos ssh). Requer que você tenha um servidor ssh (e cliente) instalado em ambas as extremidades (computerA e computerB).

Para usar essa solução, execute a partir do ComputadorB:

scp /path/to/file/on/ComputerB ComputerAUser@ComputerA:/path/to/dump/file/on/ComputerA

Cenário 2: se o ComputerA estiver por trás de um firewall NAT

Nesse cenário, você normalmente precisará configurar o encaminhamento de porta no firewall NAT. No entanto, nem sempre você tem acesso para fazer esses tipos de alterações. Neste caso, você pode configurar seu túnel ssh de ComputerA - > ComputerB tal pode encapsular conexões reversas também.

Ao estabelecer a conexão ssh, ComputerA - > ComputerB, faça isso com a opção -R da seguinte maneira. ssh ComputerBUser@ComputerB -R 2222:localhost:22 onde ComputerBUser é o nome de usuário para a conta em ComputerB sendo autenticado e 2222 é uma porta livre em ComputerB. Usaremos essa porta para fazer um túnel reverso de volta ao ComputerA a partir do ComputerB.

Agora de ComputerB , você pode emitir o comando scp da seguinte maneira para copiar arquivos de ComputerB - > ComputadorA, onde ComputerAUser é seu nome de usuário no ComputadorA:

scp -P 2222 /path/to/file/on/ComputerB ComputerAUser@localhost:/path/to/drop/file/on/computerA

O que está acontecendo aqui? Parece que estamos simplesmente dizendo ao ComputerB para enviar o arquivo de volta para si mesmo porque estamos passando localhost em vez de ComputerA. Na verdade, estamos dizendo ao scp para passar o arquivo de volta para o ComputerB, mas para a porta 2222. Todas as conexões com a porta 2222 no ComputerB são encaminhadas para a porta 22 (porta ssh padrão) no ComputerA. Assim, encurtando para trás a conexão ssh existente, não importa que o ComputerA esteja atrás de um firewall NAT.

Cenário 3: execute a cópia do arquivo de ComputerA

Ou, em vez de tentar fazer isso a partir do ComputerB, você pode simplesmente executar o comando scp do ComputerA.

scp ComputerBUser@ComputerB:/path/to/file/on/ComputerB /path/to/dump/file/on/ComputerA
    
por b_laoshi 10.04.2017 / 06:44
3

Se você precisar de uma maneira fácil de navegar no sistema de arquivos de uma máquina remota e copiar certos arquivos para a máquina local (e vice-versa), você pode usar SSHFS .

Descrição

  • Em man sshfs :

    % bl0ck_qu0te%
  • De apt show sshfs :

    % bl0ck_qu0te%

Instalação

sudo apt install sshfs

Ao contrário deste guia eu não fiz nada no meu Ubuntu 16.04. Não há grupo de usuários fuse .

Uso

  1. Crie um diretório de montagem apropriado, por exemplo:

    mkdir ~/sshfs-mount-point
    
  2. Monte um caminho remoto :

    • Monte um caminho remoto , quando estiver usando as configurações padrão do ssh:

      sshfs user@IP:/remote/path ~/sshfs-mount-point
      
    • Monte um caminho remoto ao usar configurações ssh personalizadas:

      sshfs -o IdentityFile=/path/to/id_rsa,port=2222 user@hostname-or-IP:/remote/path ~/sshfs-mount-point
      
    • Monte um caminho remoto , quando tiver configurado corretamente ~/.ssh/config file:

      sshfs hostname:/remote/path ~/sshfs-mount-point
      
  3. Desmonte o caminho remoto . Existem duas maneiras:

    • fusermount -u ~/sshfs-mount-point

    • sudo umount ~/sshfs-mount-point

Uso de acordo com a pergunta

  • Enquanto você estiver conectado ssh da máquina A para usinar B , e você está capaz de estabelecer uma conexão ssh de < strong> B para A . Você pode usar uma das abordagens acima para montar uma pasta de A em B . Em seguida, use cp , rsync ou mc para copiar seus arquivos.

  • Enquanto você estiver conectado por SSH da máquina A para usinar B , e não for capaz de estabelecer uma conexão SSH a partir de B para A . Você pode criar uma pasta dedicada na máquina B e copiar seus arquivos para essa pasta. Monte esta pasta na máquina A e mova esses arquivos para onde desejar. Você pode definir o cronjob ou o bash script que lida com essa tarefa.

por pa4080 10.04.2017 / 15:11
2

Sem estar em uma sessão SSH, você gostaria de usar

scp user@remotehost:/file/to/copy /local/destination

Se sua máquina local tiver o sshd em execução e a porta aberta, enquanto na sessão ssh você pode

scp /remote/file user@localmachine:/destination/file

Este link tem algumas soluções alternativas link

Edit: Peço desculpas por qualquer confusão, a maneira mais fácil e eficiente será abrir um segundo terminal e executar o primeiro comando scp que mencionei.

    
por nullmeta 10.04.2017 / 03:12
1

Para mover arquivos de um computador para outro em uma rede, use o utilitário scp ( scp significa cópia segura). ssh é usado apenas para acesso de login remoto.

Como você já efetuou login com êxito em outro computador em sua rede, pode simplesmente copiar seus arquivos para sua máquina local a partir de lá, mas precisará obter um ssh deamon em execução na sua máquina local. Então, instale primeiro:

$ sudo apt-get install openssh-server -y

Certifique-se de que esteja em funcionamento (a luz verde mostra que é):

$ systemctl status sshd

Coloquetodososarquivosnamáquinaremotaquevocêdesejacopiarparaoseucomputadorlocalemumdiretórioseparado.Então,useestecomando:

$scp-r[DIRECTORY][USER]@[IP_ADDRESS]:~/Downloads

-rsignificaqueodiretóriojuntocomtodooseuconteúdoseráprocessadorecursivamente.Emtermossimples,issosignificaqueéaopçãoquevocêusarátodavezquequisercopiarumdiretóriocontendoarquivos.[DIRECTORY]éocaminhoparaessediretório.[USER]éousuárioemsuamáquinalocal.[IP_ADDRESS]éoendereçoIPdessamáquina.Omaterialdepoisdo:éondevocêdesejaqueseusarquivossejamsalvosemsuamáquinalocal.Nessecaso,éapastaDownloads.

Istoéoqueesteprocessoparecenarealidade:

    
por misha 10.04.2017 / 07:40

Tags