77 votes

scp ne fonctionne pas mais ssh oui

Si je veux envoyer quelque chose via scp au serveur :

$ scp file server:
                   _____  _____  _____
$

alors trois lignes sont imprimées et le fichier n'est pas copié. Cependant, je peux me connecter au serveur via ssh sans problème :

$ ssh server

Comment faire fonctionner scp ?

95voto

Paul Points 408

Une cause possible de ce type de comportement est d'avoir tout message imprimé lors du processus de connexion sur le serveur. Scp dépend de ssh pour fournir un tunnel crypté totalement transparent entre le client et le serveur.

Vérifiez tous les scripts de connexion sur le serveur, et essayez également d'utiliser un autre utilisateur. Une autre méthode pour identifier la source de l'erreur est d'utiliser le -v dans la commande, pour suivre la progression de la transaction, et voir où elle échoue. Vous pouvez utiliser jusqu'à -vvv pour augmenter la verbosité, si nécessaire. Vérifier les différentes formes de scp peut également être instructif, comme indiqué dans le post de InChargeOfIT.

scp, sous le capot, établit un tunnel en utilisant ssh, et transfère ensuite le fichier à travers ce tunnel, avec une commande ssh à l'autre bout pour attraper le fichier lorsqu'il arrive. Ceci est illustré par l'utilisation de tar et ssh pour copier une structure de répertoire en préservant la propriété et les heures de création avec les commandes suivantes :

  tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

pour l'envoyer, et

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

pour le récupérer.

73voto

Sam Schutte Points 876

Vérifiez le fichier .bashrc ou un fichier équivalent de l'utilisateur cible. ~/.bashrc est utilisé pour les connexions non interactives. S'il y a un écho ou une commande qui sort quelque chose, cela brisera le protocole SCP.

24voto

joni Points 11

Edit : Etes-vous sûr que vous entrez un chemin valide dans la commande scp ? Par exemple :

scp test.txt username@remoteserver.com

échouera (en fait, il imprimera simplement la commande comme vous le voyez). Dans ce cas, vous devrez fournir un chemin d'accès valide au serveur distant par exemple, scp test.txt username@remoteserver.com:~/

Exemples d'utilisation :

Envoyez un fichier :

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

Obtenir un fichier :

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

Exemples :

Envoyer un fichier de mon bureau à mon dossier personnel sur un serveur distant :

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

Rappelez-vous le ~ est un raccourci pour votre répertoire personnel... par exemple, /home/

Envoyer un fichier à la racine du web :

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

Dans cet exemple, l'utilisateur john_doe aurait besoin de privilèges d'écriture sur le répertoire distant /var/www.

11voto

frederickjh Points 607

Sur certains hôtes, la source est incorrecte .bash_profile pour les connexions non interactives comme scp. Les messages qui sont imprimés dans le terminal peuvent éventuellement causer scp de ne pas fonctionner correctement. Si vous avez des messages dans votre .bash_profile cela peut en être la cause.

Pour que vos messages de connexion, votre bannière, etc. s'affichent lors des connexions interactives et que vous puissiez continuer à utiliser l'option scp via un login non interactif, ajoutez ce qui suit avant tout message qui s'imprimerait dans votre système d'information. .bash_profile fichier.

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

[ -z "$PS1" ] && return

Le code alternatif est :

[[ $- == *i* ]] || return

Et un autre code alternatif :

case $- in
    *i*) ;;
      *) return;;
esac

Qui, je crois, est la version longue du premier code alternatif. J'ai constaté que sur certains hôtes, le premier code ne fonctionne pas correctement, mais le second oui.

Pendant une connexion scp non interactive, il interrompra l'exécution de .bash_profile et permettra à scp de fonctionner, mais affichera vos messages de connexion lorsque vous vous connecterez via ssh.

Note : Cela peut également être utilisé dans votre .bashrc si vous le sourcez à partir de .bash_profile (pour $PATH) de sorte que seule une partie de celui-ci soit sourcée lors des connexions non interactives.

2voto

dips Points 121

J'appelais exec /bin/bash en .cshrc .

L'enlever a résolu le problème pour moi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X