É possível usar comandos Unix para cp um arquivo no meu subdiretório em um computador remoto via SSH?

17

Eu tenho uma série de arquivos de software baixados no meu subdiretório ~/Downloads no meu computador pessoal. Eu também estou usando bash para conectar remotamente a um computador usando ssh .

É possível transferir este arquivo via ssh para o computador remoto?

    
por ShanZhengYang 10.11.2015 / 17:17

6 respostas

42

Você pode querer usar scp para essa finalidade. É um meio seguro para transferir arquivos usando o protocolo SSH.

Por exemplo, para copiar um arquivo chamado yourfile.txt de ~/Downloads para o computador remoto, use:

scp ~/Downloads/yourfile.txt [email protected]:/some/remote/directory

Você pode ver mais exemplos aqui .

    
por 10.11.2015 / 17:23
38

Embora scp seja claramente a ferramenta certa para isso, se por algum motivo você não puder usá-lo, poderá fazer algo como o seguinte da sua máquina local para copiar, digamos, uma estrutura de diretório para a máquina remota: / p>

tar -c . | ssh <remote> tar -x

Isto irá tar do diretório atual na máquina local, e escreva tar to stdout que será então canalizado para um comando ssh onde ele irá executar um comando remoto para descompactar o arquivo que ele lê de stdin

Editado para refletir o comentário de Dietrich Epp sobre -f - ser o padrão tanto na criação quanto na extração, então não é necessário especificar explicitamente.

    
por 10.11.2015 / 17:33
17

Se você quiser fazer isso em uma ocasião mais do que rara, sugiro montar o sistema de arquivos remoto com sshfs se você estiver usando um Unix que suporte FUSE (Linux, * BSD, Mac OS X). Crie um diretório em seu diretório inicial, digamos, chamado ~ / remote-server:

    $ mkdir ~/remote-server

Em seguida, monte o sistema de arquivos remoto com sshfs . Substitua "yourserver.com" pelo nome do host da sua máquina remota e "nome do diretório remoto" pelo diretório que você está usando no sistema remoto.

    $ sudo sshfs [email protected]:/name/of/remote/directory ~/remote-server/

Uma vez feito isso, o diretório remoto faz parte do seu sistema de arquivos e você pode usar todas as suas ferramentas normais, incluindo cp :

    $ cp ~/Downloads/your-files ~/remote-server

Se você ainda não tiver o sshfs instalado, poderá instalá-lo em seu computador usando o gerenciador de pacotes (procure por pacotes com o nome sshfs ou fuse-sshfs ). Para mais informações, você pode ler um tutorial online .

Esta, a propósito, é a minha maneira favorita de gerenciar arquivos em servidores remotos. Eu normalmente mantenho um servidor de produção e dois servidores de desenvolvimento montados dessa maneira e uso meu fluxo de trabalho normal de navegação de arquivos com eles.

    
por 10.11.2015 / 22:27
8

Primeira vez, não há diferença real entre scp (cópia acima de ssh ) e rsync .

Execuções subseqüentes serão beneficiadas pelo rsync não copiando arquivos que já existem.

rsync -avH ~/Downloads  username@remotehost:Downloads
  • -a para todos os arquivos
  • -v para verboso
  • -H para "apenas descobrir links simbólicos e fazer a coisa certa"
  • , em seguida, os caminhos de origem e destino. Você pode usar curingas na origem ou apenas sincronizar todo o diretório.

Outros indicadores úteis incluem:

  • --delete para excluir arquivos no destino que não existem mais na origem.
  • --dry-run para testes - muito útil quando combinado com --delete .

Isso usará as chaves ssh para fazer um login sem senha também, se você as tiver configurado.

No final da execução, rsync dirá quantas vezes foi mais rápido fazer a cópia simples novamente.

    
por 11.11.2015 / 05:18
4

Para adicionar as respostas acima. Às vezes não tenho certeza sobre o caminho remoto. Nesses casos, uso sftp para navegar primeiro até o local desejado e, em seguida, uso o recurso get ou put para baixar ou carregar um arquivo.

Se você também quiser manter algo sempre sincronizado e até mesmo desejar executar localmente algum arquivo localizado na máquina remota, sshfs funciona muito bem.

    
por 12.11.2015 / 10:29
-1

Estou fazendo algo muito parecido com o ssh. Eu criei uma ferramenta de compilação personalizada para o Visual Studio e estou basicamente tendo VS executar um comando ssh que copia meu código para um computador de destino e, em seguida, compila-lo nesse computador de destino.

ssh userB@hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand'

Observe o uso de aspas simples e ponto e vírgula. O primeiro encapsula seus comandos para hostB via ssh e o último permite que você execute vários comandos do sistema hostB em um comando ssh do hostA.

Para que isso funcione, você precisará configurar as chaves ssh em sua máquina inicial para que você possa ser userA @ hostA e faça login no hostB como userB. O processo para criar uma chave ssh pública para userA @ hostA está bem documentado. Se você não criar uma chave pública em hostA para userA e copiar essa chave para hostB como userB, você será forçado a inserir sua senha toda vez - o que arruína a alegria da automação.

    
por 11.11.2015 / 05:43

Tags