Use scp para transferir um arquivo do diretório local X para o diretório remoto Y


99

Dei uma olhada em outras perguntas aqui e em vários tutoriais de "uso de scp" na Internet, mas não consigo entender o que está errado.

Estou usando o Linux Mint e estou tentando descobrir como o scp funciona.

Eu tenho um arquivo file.ext (no meu computador) no diretório / home / name / dir /

Eu me conecto a uma máquina remota usando ssh , como:

ssh -p 2222 username@domain

ele me pede a senha e o shell exibe:

username@domain ~ $

agora, se eu emitir o comando (antes de executar o ssh, eu estava no diretório local / home / name / dir ):

scp -r -P 2222 file.ext username@domain 

saída é:

cp: cannot stat ‘file.ext’: No such file or directory

O mesmo resultado se, em vez de file.ext, eu escrever o caminho completo

scp -r -P 2222 /home/name/dir/file.ext username@domain 

Além disso, o administrador do servidor me disse que eu devo carregar o arquivo no meu diretório pessoal remoto (em vez de raiz), como:

scp -r -P 2222 file.ext username@domain:~/

mas quando eu faço e pressiono "Enter" nada acontece, como se o shell estivesse esperando por mais informações.

Resumo dos meus problemas:

  • cp: esse arquivo ou diretório não existe
  • shell "preso" em ~ /

Alguma sugestão?


não está claro se o seu problema está relacionado apenas a estar na máquina errada ... você poderia prefixar cada comando com o host em que está executando? por exemplo localuser@machineA: ssh -p 2222 username@domain(para indicar que você está executando o comando ssh como localuser em machineA)
trema

1
quando se utiliza scp, o remoto lado sempre tem que conter o cólon (por exemplo remotehost:/tmp), então ele só vai fazer uma cópia ordinária ( scp /tmp/foo.txt example.comcopia /tmp/foo.txtem um arquivo local example.com)
trema

remover a -rbandeira, como isso não é necessário para copiar arquivos individuais (é usado para recursivamente copiar diretórios)
trema

Você está emitindo o comando scp dentro da sessão sshe ? Isso faria sentido se você estiver na máquina local.
21414 Alexis

Respostas:


119

Você precisa executar o scpcomando na máquina local, não no controle remoto. Você não precisa de sshnada:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Você também não precisa de -r:

 -r      Recursively copy entire directories.  

Se você já está conectado à máquina remota e deseja copiar do seu local, precisa garantir que sua máquina local esteja acessível via Internet e esteja sshconfigurada. Eu não acho que é isso que você procura, mas se for, execute isso no controle remoto:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
obrigado. o problema era que eu estava tentando executar o scp dentro da sessão ssh. agora funciona!
dragonmnl

28

Eu forneço dois métodos de carregamento de arquivos para cima / baixo entre a máquina remota e a local (eu uso o Mac air):

Nesse caso, eu quero ativar / desativar o "11.jpeg" entre local e remoto:

1

Copiar arquivos no serviço para o diretório local: Você deve estar no terminal local do bash para executar este comando, não quando estiver no ssh!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

copiar arquivos no diretório local para o serviço remoto: você também deve estar no terminal local do bash

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Para alcançar a mesma intenção ao fazer logon no SSH , você deve primeiro definir “Preferências do Sistema> Compartilhamento> Logon Remoto> Todos os Usuários (não tenho certeza se você deve definir para" todos os usuários ", mas funciona nessa situação) ) ”O Mac dirá a você" Para efetuar login neste computador remotamente, digite: ssh username @ xxxxxx e digite o comando abaixo:

    nome de usuário scp @ domínio: /home/xxx/xxx/11.jpeg nome de usuário @ xxxxxx: / Users / username / Desktop /

Este comando acima é para fazer o download de arquivos de remoto para local quando você estiver efetuando login no ssh. Apenas altere os dois caminhos quando desejar fazer upload de arquivos.


Finalmente, acho Filezilla é provavelmente o mais conveniente no trabalho diário ~~
maizer

5

Se você estiver executando este comando scp na máquina remota, ele estará procurando file.extcomo um arquivo "local", ou seja, na máquina remota.

Para copiar um arquivo da máquina remota para a local, use scp -P 2222 username@domain:dir/file.ext localdir(assumindo que file.extesteja no ~/dircomputador remoto, como no seu exemplo). Se você executar scpna máquina remota, inverta "local" e "remoto".


1
O OP deseja copiar do local para o remoto, consulte o título do OP.
terdon

Opa, acho que você está certo. Mas ele está aparentemente fazendo isso para trás ...
alexis

3

Use o scpcomando

Se você deseja transferir uma pasta, apenas zipa primeira, podemos unzipposteriormente.

No seu computador, execute o seguinte:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Aqui rootestá sua conta e 10.145.198.100é o endereço IP do servidor remoto. Vamos copiar the_filepara a ~/pasta no controle remoto.

Descompacte o arquivo:

$ unzip the_zip_file.zip -d destination_folder

Por que rootter acesso SSH na máquina remota? Isso é bastante inseguro. Melhor usar um uso comum e depois sudofazer o que a raiz tiver que fazer nessa máquina.
Kusalananda

1

Apenas uma pequena contribuição, talvez possa ajudar iniciantes como eu: o caminho para o diretório remoto deve ser escrito assim: username@domain:~/remote_directory

O que quero destacar aqui é que devemos sempre adicionar isso :~/


0

Solução para copiar arquivos de Linux clientparaLinux Server

  1. Verifique se sshdestá sendo executado no seu servidor usando: ps aux | grep sshd

  2. Caso contrário, instale OpenSSHusando sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Reinicie o servidor e verifique se sshdestá executando usando ps aux | grep sshd

  4. Se você precisar, pode configurar seu /etc/ssh/sshd_configarquivo, mas não é necessário para configurações simples

  5. verifique se as portas estão abertas usando netcat nc -v -z 127.0.0.1 22

  6. Para copiar arquivos de um Linuxcliente para um Linuxcliente, use scp da seguinte maneira scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Para verificar se o arquivo foi copiado, use ssh username@10.22.33.45e forneça sua senha.

Solução para copiar arquivos de Linux clientpara `Windows

  1. Existem vários clientes para executar servidores SSH no Windows, como o OpenSSH da MS

    MobaSSH

    Servidor SSH Bitvise

  2. Instale um dos servidores acima e verifique se a porta 22 está aberta usando

    firewall netsh advfirewall adicionar nome da regra = "SSH Port 22" dir = em ação = permitir protocolo = UDP localport = 22

    firewall netsh advfirewall adicionar nome da regra = "Porta SSH 22" dir = fora da ação = permitir protocolo = UDP localport = 22

    firewall netsh advfirewall adicionar nome da regra = "SSH Port 22" dir = em ação = permitir protocolo = TCP localport = 22

    firewall netsh advfirewall adicionar nome da regra = "Porta SSH 22" dir = fora da ação = permitir protocolo = TCP localport = 22

    netsh advfirewall define o estado de todos os perfis como desativado

  3. Comparações desses servidores:

    Servidor SSH Bitvise

    1. Fornece quase perto do cmdprompt nativo , powershellprompt, preenchimento automático

    2. Fornece recursos adicionais para personalização, se você precisar de uso avançado

    3. A personalização do usuário para necessidades simples é 0. Comecei a usá-lo em 2 minutos, depois de ter passado muito tempo tentando entrar MobaSSHe OpenSSHtrabalhar.

    4. Para copiar arquivos usando scp, use: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Gratuito para uso pessoal, US $ 99 para uso profissional. Por causa de tantos recursos e ótima integração, o preço vale a pena

    MobaSSH:

    1. fornece um shell Linux no Windows, onde simples linux comandos tais como ls, cp, findetc trabalho, semelhante aoMINGW64

    2. você pode acessar cmde powershelldiretamente digitando cmdou powershell

    3. O suporte a Unicode é ruim. Codificação não está correta. Por exemplo, se você tentar iniciar o Pythonintérprete, ele travará. Você precisará alterar a codificação manualmente usando ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 e, em seguida, inicie o prompt do Python

    4. A grande coisa sobre MobaSSH é que ele tem uma interface de usuário muito simples, e scpe sshe bem integrado. Então, funcionará para casos de uso simples

    5. Para copiar arquivos de um Linuxcliente para um Windowsservidor em execução MobaSSH: use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Isto é porque MobaSSHé baseado cygwine suas unidades são mapeadas da mesma maneira que as cygwinunidades -s são mapeadas.

    Use VMs da Microsoft com o OpenSSHv6.7 instalado em https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , o OpenSSHv6.7 já está instalado.

    1. É muito buggy e você precisará personalizá-lo intensamente.

    2. A conclusão do comando não funciona

    3. Isso deixará espaços em branco quando você estiver movendo o cursor no terminal

    4. Python não funciona

    5. Versões posteriores do OpenSSH podem ter melhorado. MS mais parece disponibilizar o OpenSSH via Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Se você estiver no OSX ...

Quando tentei executá-lo com o nome de usuário @ local: / file_directory ...

Eu recebi o seguinte erro:

ssh: local: node name or service name not known

Solução

No meu Mac, fiz o seguinte para configurar o local ssh:

'Preferências do sistema' -> 'Internet e redes' -> 'Compartilhamento' -> ATIVAR 'Login remoto'

Isso então forneceu o nome de usuário @ endereço IP.


-1

Eu tive esse mesmo problema hoje no MAC.

Digite o seguinte comando:

scp /local-file-path/ /-remote-location-path/
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.