Se eu quiser enviar algo via scp para o servidor:
$ scp file server:
_____ _____ _____
$
, três linhas são impressas e o arquivo não é copiado. No entanto, eu posso conectar ao servidor via ssh sem problemas:
$ ssh server
Como fazer o scp funcionar?
scp file server:
(assumindo que "servidor" seja um nome de host válido), o arquivo é copiado para o diretório da sua conta.scp
um local diferente no servidor e depoiscp
oumv
depoisssh
Respostas:
Uma causa possível desse tipo de comportamento é a impressão de qualquer mensagem 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 logon no servidor e tente usar um usuário diferente. Outro método para identificar a origem do erro é usar o -v no comando, para rastrear o andamento da transação e ver onde ela falha. Você pode usar até -vvv para aumentar a verbosidade, se necessário. A verificação das várias formas de scp também pode ser instrutiva, conforme listado na postagem do InChargeOfIT.
O scp, sob o capô, configura um túnel usando ssh e depois transfere o arquivo sobre esse túnel, com um comando ssh na extremidade oposta para capturar o arquivo à medida que ele se aproxima. Isso é ilustrado pelo uso de tar e ssh para copiar uma estrutura de diretório, preservando os tempos de propriedade e criação com os seguintes comandos:
enviá-lo e
recuperá-lo.
fonte
enable
e digitar uma senha não significa que ele é privado 15. Se você não vê o "privilégio 15" em algum lugarshow run | inc USERNAME
, ele não poderá scp.export SHELL=/bin/zsh
) em~/.bashrc
. Isso às vezes está sendo usado na ausência dechsh
.Verifique o arquivo .bashrc ou equivalente do usuário de destino. ~ / .bashrc é fornecido para logins não interativos. Se houver um eco ou comando que produza alguma coisa, ele quebrará o protocolo SCP.
fonte
fortune | cowsay
, basta colocá-lo em .bash_profile. Isso é apenas para logons interativos e não deve ser originado durante a sessão do SCP..bashrc
, que não existiria na outra máquina. Você pode usar a lógica nesta resposta para pular~/.bashrc
quando não interativo (que é o casoscp
).Edit: Você está certo de que está inserindo um caminho válido no comando scp? Por exemplo:
falhará (na verdade, apenas imprimirá o comando como você está vendo). Nesse caso, você precisará fornecer um caminho válido para o servidor remoto.
scp test.txt [email protected]:~/
Exemplos de usos:
Envie um arquivo:
Obtenha um arquivo:
Exemplos:
Envie um arquivo da minha área de trabalho para minha pasta pessoal em um servidor remoto:
Lembre-se de que
~
é um atalho para o seu diretório pessoal ... por exemplo, / home /Envie um arquivo para o webroot:
Neste exemplo, o usuário john_doe precisaria de privilégios de gravação no diretório remoto / var / www.
fonte
------
... nenhum dos seus exemplos se relaciona a isso.scp somefile [email protected]:
além disso, não ter as permissões corretas no diretório remoto também causaria problemas. Editou minha resposta para torná-la um pouco mais claraEm alguns hosts, eles originam incorretamente
.bash_profile
logins não interativos como o scp. As mensagens impressas no terminal podemscp
não funcionar corretamente. Se você tiver mensagens no seu,.bash_profile
isso pode ser a causa.Para ainda exibir suas mensagens de login, banner etc. em logins interativos e ainda poder usá-lo
scp
por meio de um logon não interativo, adicione o seguinte antes de qualquer mensagem que seja impressa em seu.bash_profile
arquivo.O código alternativo é:
E outro código alternativo:
Acredito que seja a versão mais longa do primeiro código alternativo. Eu encontrei em alguns hosts o primeiro código não funciona corretamente, mas o segundo.
Durante um login scp não interativo, ele interromperá a execução de .bash_profile e permitirá que o scp funcione, mas exibirá suas mensagens de login quando você fizer login via ssh.
Nota: Isso também pode ser usado no seu
.bashrc
arquivo se você o.bash_profile
originar (por $ PATH), portanto apenas parte dele é originada durante logins não interativos.fonte
Isso não responde diretamente à pergunta, mas pode ser útil para pessoas como eu, procurando uma solução com um scp congelante ao transferir arquivos entre 2 hosts remotos.
Se
scp
travar por causa das mensagens do ssh, isso pode ajudar a suprimi-las:e / ou
No meu caso, isso pareceu ajudar, mas não resolveu todo o problema. Não foi possível descobrir por que o scp trava ao transferir de remoto para remoto. Ele ficou no meio do arquivo. 9 vezes funcionou, a tentativa número 10 não. Suspeitamos que isso ocorra quando nossa conexão VPN receber um pico de tráfego por um momento e o scp não se recuperar. Ele realmente trava 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ê precisa habilitar
no arquivo ~ / .shh / config da máquina que está executando o script. Obviamente, isso é apenas uma solução se as máquinas remotas estiverem dentro da sua rede confiável.
fonte
Eu estava chamando
exec /bin/bash
no.cshrc
.Remover isso resolveu o problema para mim.
fonte