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?
scp file server:
(en supposant que "serveur" est un nom d'hôte valide), le fichier est copié dans votre répertoire de compte.scp
un emplacement différent sur le serveur, puis uncp
oumv
aprèsssh
Réponses:
Une cause possible de ce type de comportement est l’ impression d’ un message pendant le 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 d'identification de la source de l'erreur consiste à utiliser le -v dans la commande pour suivre la progression de la transaction et voir où elle a échoué. Vous pouvez utiliser jusqu'à -vvv pour augmenter la verbosité, si nécessaire. Contrôler les différentes formes de scp peut également être instructif, comme indiqué dans le post par InChargeOfIT.
scp, sous le capot, configure un tunnel à l'aide de ssh, puis transfère le fichier sur ce tunnel, avec une commande ssh à l'extrémité distante pour intercepter le fichier à mesure qu'il arrive. Ceci est illustré par l'utilisation de tar et ssh pour copier une structure de répertoire en préservant les temps de propriété et de création à l'aide des commandes suivantes:
pour l'envoyer, et
pour le récupérer.
la source
enable
et entrer un mot de passe qu'ils sont privés 15. Si vous ne voyez pas le "privilège 15" quelque part,show run | inc USERNAME
ils ne pourront pas scp.export SHELL=/bin/zsh
) dans~/.bashrc
. Ceci est parfois utilisé en l'absence dechsh
.Vérifiez le fichier .bashrc ou équivalent de l'utilisateur cible. ~ / .bashrc a été créé pour des connexions non interactives. S'il y a un echo ou une commande qui génère quelque chose, le protocole SCP sera cassé.
la source
fortune | cowsay
, insérez-le simplement dans .bash_profile. Cela concerne uniquement les connexions interactives et ne doit pas être généré pendant la session SCP..bashrc
, qui n'existerait pas sur l'autre machine. Vous pouvez utiliser la logique de cette réponse pour ignorer les situations~/.bashrc
non interactives (ce qui est le casscp
).Edit: Êtes-vous certain que vous entrez un chemin valide dans la commande scp? Par exemple:
échouera (en fait, il affichera simplement la commande telle que vous la voyez). Dans ce cas, vous devrez fournir un chemin valide au serveur distant. Par exemple,
scp test.txt [email protected]:~/
Exemples d'utilisation:
Envoyer un fichier:
Obtenir un fichier:
Exemples:
Envoyer un fichier de mon bureau à mon dossier personnel sur un serveur distant:
N'oubliez pas qu'il
~
s'agit d'un raccourci pour votre répertoire personnel ... par exemple, / home /Envoyer un fichier à la racine Web:
Dans cet exemple, l'utilisateur john_doe aurait besoin de privilèges d'écriture dans le répertoire distant / var / www.
la source
------
... aucun de vos exemples ne se rapporte à cela.scp somefile [email protected]:
, le fait de ne pas disposer des autorisations appropriées sur le répertoire distant poserait également des problèmes. Edité ma réponse pour le rendre un peu plus clairSur certains hôtes, ils ne fournissent pas correctement
.bash_profile
des noms de connexion non interactifs comme scp. Les messages imprimés sur le terminal peuvent éventuellement entraîner unscp
dysfonctionnement. Si vous avez des messages dans votre.bash_profile
cela peut en être la cause.Pour que vos messages de connexion, vos bannières, etc., s'affichent toujours lors de connexions interactives et que vous puissiez toujours les utiliser
scp
via un nom de connexion non interactif, ajoutez ce qui suit avant tout message pouvant être imprimé dans votre.bash_profile
fichier.Le code alternatif est:
Et un autre code alternatif:
Ce qui, je crois, est la version la plus longue du premier code alternatif. J'ai trouvé sur certains hôtes que le premier code ne fonctionne pas correctement mais que le second fonctionne.
Lors d'une connexion scp non interactive, il interrompra toute exécution ultérieure de .bash_profile et permettra à scp de fonctionner, mais affichera vos messages de connexion lorsque vous vous connecterez via ssh.
Remarque: Ceci peut également être utilisé dans votre
.bashrc
fichier si vous le sourcez.bash_profile
(pour $ PATH) afin que seule une partie de celui-ci soit obtenue lors de connexions non interactives.la source
Cela ne répond pas directement à la question, mais pourrait être utile pour les personnes comme moi qui recherchent une solution avec un scp gelant lors du transfert de fichiers entre 2 hôtes distants.
Si se
scp
bloque à cause de messages de ssh, cela pourrait aider à les surpresser:et / ou
Dans mon cas, cela a semblé aider, mais n'a pas résolu le problème dans son ensemble. Nous ne pouvions pas savoir pourquoi scp se bloque lors du transfert de distant en distant. Il était accroché au milieu du fichier. 9 fois cela a fonctionné, la tentative numéro 10 n'a pas fonctionné. Nous soupçonnions qu'il pouvait se bloquer lorsque notre connexion VPN subissait un pic de trafic pendant un moment, puis que scp ne récupère pas. Il ne tient que pour toujours et ne donne même pas un message d'erreur.
Cependant, j'ai abandonné et suis passé à sftp. Ceci est raisonnablement plus rapide, car il utilise une connexion directe entre les hôtes distants. Vous devez activer
dans le fichier ~ / .shh / config de la machine qui exécute le script. Bien entendu, ce n'est une solution que si les ordinateurs distants se trouvent tous les deux dans votre réseau de confiance.
la source
Je l'appelais
exec /bin/bash
dans.cshrc
.Le fait de supprimer ceci a résolu le problème pour moi.
la source