scp não funciona mas ssh faz

47

Se eu quiser enviar algo via scp para o servidor:

$ scp file server:
                   _____  _____  _____
$

, então três linhas são impressas e o arquivo não é copiado. No entanto eu posso conectar ao servidor via ssh sem problema:

$ ssh server

Como fazer o scp funcionar?

    
por scdmb 29.02.2012 / 16:44

6 respostas

62

Uma causa possível deste tipo de comportamento é ter qualquer mensagem impressa durante o processo de login no servidor. O scp depende do ssh para fornecer um túnel criptografado totalmente transparente entre o cliente e o servidor.

Verifique todos os scripts de login no servidor e tente usar outro usuário. Outro método de identificar a origem do erro é usar o -v no comando, para rastrear o progresso da transação e ver onde ele falha. Você pode usar até -vvv para aumentar a verbosidade, se necessário. Verificar as várias formas de scp também pode ser instrutivo, conforme listado no post por InChargeOfIT.

scp, sob o capô, configura um túnel usando ssh e, em seguida, transfere o arquivo por esse túnel, com um comando ssh na extremidade mais distante para capturar o arquivo conforme ele é exibido. Isso é ilustrado pelo uso de tar e ssh para copiar uma estrutura de diretórios que preserva os tempos de propriedade e criação com os seguintes comandos:

  tar czf - ./* | ssh [email protected] tar xzf - -C ~/saved_tree

para enviar e

ssh [email protected] "tar czf - ~/saved_tree" | tar xzvf - -C ./

para recuperá-lo.

    
por 04.03.2012 / 03:57
50

Verifique o arquivo .bashrc ou equivalente do usuário alvo. ~ / .bashrc é originado para logins não interativos. Se houver um eco ou comando que produza alguma coisa, ele quebrará o protocolo SCP.

    
por 03.06.2014 / 20:20
13

Edit: Você tem certeza de que está entrando em um caminho válido no comando scp? Por exemplo:

scp test.txt [email protected]

irá falhar (na verdade, será apenas imprimir o comando como você está vendo). Nesse caso, você precisará fornecer um caminho válido para o servidor remoto. Por exemplo, scp test.txt [email protected]:~/

Exemplos de uso:

Envie um arquivo:

scp /path/to/local/file [email protected]:/path/to/remote/directory

Obter um arquivo:

scp [email protected]:/path/to/remote/file /path/to/local/directory

Exemplos:

Envie um arquivo da minha área de trabalho para minha pasta pessoal em um servidor remoto:

scp ~/Desktop/myfile.txt [email protected]:~/

Lembre-se de que ~ é um atalho para o seu diretório pessoal ... por exemplo, / home /

Envie um arquivo para o webroot:

scp ~/Documents/working/index.html [email protected]:/var/www/index.html

Neste exemplo, o usuário john_doe precisaria escrever privilégios no diretório / var / www remoto.

    
por 29.02.2012 / 18:21
0

Isso não responde diretamente à pergunta, mas pode ser útil para pessoas como eu, que procuram uma solução com um scp de congelamento ao transferir arquivos entre dois hosts remotos.

Se scp trava por causa das mensagens do ssh, pode ajudar a suprimi-las:

scp -o "StrictHostKeyChecking no"

e / ou

scp -B

From the scp man:

-B Selects batch mode (prevents asking for passwords or passphrases).

-o ssh_option Can be used to pass options to ssh in the format used in there is no separate scp command-line flag. For full details of the options listed below, and their possible values, see ssh_config(5).

No meu caso, isso pareceu ajudar, mas não resolveu toda a questão. Não foi possível descobrir por que o scp trava ao transferir de remoto para remoto. Pendurou no meio do arquivo. 9 vezes funcionou, tentativa número 10 não. Suspeitamos que poderia ser interrompido quando nossa conexão VPN recebe um pico de tráfego por um momento e, em seguida, o scp não se recupera. Realmente fica pendurado para sempre e nem sequer dá uma mensagem de erro.

No entanto, desisti e mudei para o sftp. Isso é razoavelmente mais rápido, pois usa uma conexão direta entre os hosts remotos. Você tem que habilitar

Host example.com
    AgentForward yes

no arquivo ~ / .shh / config da máquina que está executando o script. É claro que esta é apenas uma solução se as máquinas remotas estiverem dentro da sua rede confiável.

    
por 02.10.2018 / 16:01
0

Eu estava chamando exec /bin/bash em .cshrc .

Remover isso resolveu o problema para mim.

    
por 14.10.2018 / 16:34
0

Em alguns hosts, eles alocam incorretamente .bash_profile para logins não interativos, como scp. Mensagens que são impressas no terminal podem fazer com que scp não funcione corretamente. Se você tiver mensagens no seu .bash_profile , isso pode ser a causa.

Para que suas mensagens de login, banner etc. sejam exibidas em logins interativos e ainda possam usar scp por meio de um login não interativo, adicione o seguinte antes de qualquer mensagem que seja impressa no arquivo .bash_profile .

# ********** If not running interactively, don't do anything more! ***********

[ -z "$PS1" ] && return

Durante um login scp não interativo, ele abortará a execução de .bash_profile e permitirá que o scp funcione, mas exibirá suas mensagens de login quando você efetuar login via ssh.

Observação: Isso também pode ser usado em seu arquivo .bashrc se você o originar de .bash_profile (para $ PATH), portanto apenas parte dele é originado durante logons não interativos. / p>     

por 02.12.2018 / 15:21

Tags