Utilisez scp pour transférer un fichier du répertoire local X au répertoire distant Y


99

J'ai jeté un coup d'œil sur d'autres questions ici et sur divers tutoriels sur l'utilisation de scp sur Internet, mais je ne peux pas déterminer ce qui ne va pas.

J'utilise Linux Mint et j'essaie de comprendre le fonctionnement de scp .

J'ai un fichier fichier.ext (sur mon ordinateur) dans le répertoire / home / nom / répertoire /

Je me connecte à une machine distante à l'aide de ssh , comme:

ssh -p 2222 username@domain

il me demande le mot de passe et le shell affiche:

username@domain ~ $

maintenant, si je lance la commande (avant d’exécuter ssh, j’étais dans le répertoire local / home / name / dir ):

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

la sortie est:

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

Même résultat si au lieu de fichier.ext j'écris le chemin complet

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

De plus, l'administrateur du serveur m'a dit que je téléchargerais le fichier dans mon répertoire personnel distant (au lieu de root), comme suit:

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

mais quand je le fais et appuie sur "Entrée" rien ne se passe, comme si le shell attendait une entrée supplémentaire.

Résumé de mes problèmes:

  • cp: aucun fichier ou répertoire de ce type
  • coquille "collée" sur ~ /

Aucune suggestion?


il est difficile de savoir si votre problème est uniquement lié au fait d'être sur la mauvaise machine ... pouvez-vous s'il vous plaît préfixer chaque commande avec l'hôte sur lequel vous exécutez? par exemple localuser@machineA: ssh -p 2222 username@domain(pour indiquer que vous exécutez la commande ssh en tant qu'utilisateur local sur la machineA)
lundi

1
lors de l'utilisation scp, le côté distant doit toujours contenir les deux points (par exemple remotehost:/tmp), sinon il ne fera qu'une copie ordinaire ( scp /tmp/foo.txt example.comsera copié /tmp/foo.txtdans un fichier local example.com)
umläute

supprime l' -rindicateur, car cela n'est pas nécessaire pour la copie de fichiers individuels (il est utilisé pour copier des répertoires de manière récursive )
umläute

Etes-vous en train d'exécuter la commande scp dans la session sshe ? Cela aurait du sens si vous êtes sur la machine locale.
alexis

Réponses:


119

Vous devez exécuter la scpcommande à partir de la machine locale et non de la télécommande. Vous n'avez pas besoin du sshtout:

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

Vous n'avez pas non plus besoin du -r:

 -r      Recursively copy entire directories.  

Si vous êtes déjà connecté à la machine distante et souhaitez copier à partir de votre local, vous devez vous assurer que votre machine locale est accessible via Internet et qu'elle a été sshconfigurée. Je ne pense pas que c'est ce que vous cherchez, mais si c'est le cas, lancez-le à partir de la télécommande:

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

1
Merci. le problème était que j'essayais d'exécuter scp dans ssh session. maintenant ça marche!
dragonmnl

28

Je propose deux méthodes de chargement de fichier haut / bas entre la machine distante et la machine locale (j'utilise Mac air):

Dans ce cas, je veux monter / descendre "11.jpeg" entre local et distant:

1.

Copier des fichiers sur le service dans le répertoire local: Vous devez être dans un terminal bash local pour exécuter cette commande, et non dans ssh!

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

copier les fichiers du répertoire local vers le service distant: vous devez également vous trouver dans le terminal bash local

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. Pour atteindre le même objectif lorsque vous vous connectez à SSH , vous devez d'abord définir «Préférences système> partage> connexion à distance> tous les utilisateurs (je ne suis pas sûr si vous devez définir pour« tous les utilisateurs », mais cela fonctionne dans cette situation. ) "Le Mac vous le dira" Pour vous connecter à cet ordinateur à distance, tapez: ssh username @ xxxxxx, puis tapez la commande ci-dessous:

    nom d'utilisateur scp @ domaine: /home/xxx/xxx/11/11.jpeg nom d'utilisateur @ xxxxxx: / Utilisateurs / nom d'utilisateur / Bureau /

Cette commande ci-dessus sert à télécharger un fichier de local à local lorsque vous vous connectez à ssh. Changez simplement le chemin d'accès lorsque vous souhaitez télécharger un fichier.


Enfin, je trouve que Filezilla est probablement le plus pratique au travail quotidien ~~
maizer

5

Si vous exécutez cette commande scp sur la machine distante, celle-ci est recherchée en file.exttant que fichier "local", c'est- à- dire sur la machine distante.

Pour copier un fichier de la machine distante vers la machine locale, utilisez-le scp -P 2222 username@domain:dir/file.ext localdir(en supposant qu'il se file.exttrouve ~/dirsur l'ordinateur distant, comme dans votre exemple). Si vous utilisez scpla machine distante, inversez "local" et "remote".


1
L'OP veut copier de local à distant, voir le titre de l'OP.
terdon

Oups, je suppose que tu as raison. Mais il semble le faire à l'envers ...
alexis

3

Utilisez la scpcommande

Si vous voulez transférer un dossier, juste ziple premier, nous le pouvons unzipplus tard.

Depuis votre ordinateur, lancez ceci:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

Voici rootvotre compte et 10.145.198.100l'adresse IP du serveur distant. Nous allons copier the_filedans un ~/dossier de la télécommande.

Décompressez le fichier:

$ unzip the_zip_file.zip -d destination_folder

Pourquoi aurait rootmême un accès SSH sur la machine distante? C'est assez peu sécurisé. Mieux vaut utiliser un usage ordinaire et faire ensuite sudotout ce que root doit faire sur cette machine.
Kusalananda

1

Juste une petite contribution, peut-être que cela peut aider les débutants comme moi: le chemin du répertoire distant devrait être écrit comme suit: username@domain:~/remote_directory

Ce que je veux souligner ici, c’est que nous devrions toujours ajouter que :~/


0

Solution pour copier des fichiers de Linux clientàLinux Server

  1. Vérifiez si sshdfonctionne sur votre serveur en utilisant: ps aux | grep sshd

  2. Si ce n'est pas le cas, OpenSSHutilisez sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Redémarrez votre serveur et vérifiez qu'il sshdfonctionne à l'aide de ps aux | grep sshd

  4. Si vous avez besoin, vous pouvez configurer votre /etc/ssh/sshd_configfichier, mais ce n'est pas nécessaire pour des configurations simples

  5. vérifier que les ports sont ouverts en utilisant netcat nc -v -z 127.0.0.1 22

  6. Pour copier des fichiers d'un Linuxclient sur un Linuxclient, utilisez scp comme suit scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Pour vérifier que le fichier a été copié, utilisez ssh username@10.22.33.45et indiquez votre mot de passe.

Solution pour copier des fichiers de Linux client`Windows

  1. Il existe plusieurs clients pour exécuter des serveurs SSH sous Windows, tels que OpenSSH à partir de MS.

    MobaSSH

    Bitvise serveur SSH

  2. Installez l’un des serveurs ci-dessus et assurez-vous que le port 22 est ouvert à l’aide de

    Pare-feu netsh advfirewall add nom de règle = "SSH Port 22" dir = in action = autoriser le protocole = UDP localport = 22

    Pare-feu netsh advfirewall add nom de règle = "SSH Port 22" dir = out action = autoriser le protocole = UDP localport = 22

    Pare-feu advfirewall netsh add nom de règle = "SSH Port 22" dir = in action = autoriser le protocole = TCP localport = 22

    Pare-feu advfirewall netsh add nom de règle = "SSH Port 22" dir = out action = autoriser le protocole = TCP localport = 22

    netsh advfirewall définit l'état allprofiles

  3. Comparaisons de ces serveurs:

    Bitvise serveur SSH

    1. Fournit presque proche de l' cmdinvite native , l' powershellinvite, l'auto-complétion

    2. Fournit des fonctionnalités supplémentaires pour la personnalisation, si vous avez besoin d'une utilisation avancée

    3. La personnalisation des utilisateurs pour les besoins simples est égale à 0. Je me suis lancée dans les 2 minutes, après avoir passé beaucoup de temps à essayer d’obtenir MobaSSHet OpenSSHde travailler.

    4. Pour copier des fichiers avec scp, utilisez: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Gratuit pour un usage personnel, 99 $ pour un usage professionnel. En raison de ses nombreuses fonctionnalités et de sa grande intégration, le prix en vaut la peine

    MobaSSH:

    1. fournit un shell linux sur windows linux où des commandes simples telles que ls, cp, findetc travail, semblable àMINGW64

    2. vous pouvez accéder cmdet powershelldirectement en tapant cmdou powershell

    3. Le support Unicode est faible. L'encodage n'est pas correct. Par exemple, si vous essayez de démarrer Pythoninterpréteur, cela plantera. Vous devrez modifier l'encodage manuellement à l'aide de ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 puis au démarrage de l'invite Python.

    4. L'avantage de MobaSSH est qu'il dispose d'une interface utilisateur très simple, et scpet sshbien intégré. Donc, va travailler pour des cas d'utilisation simples

    5. Pour copier des fichiers d’un Linuxclient sur un Windowsserveur en cours d’exécution MobaSSH: use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Ceci est dû au MobaSSHfait cygwinque ses lecteurs sont mappés de la même manière que les cygwinlecteurs -s sont mappés.

    Utilisez les ordinateurs virtuels de Microsoft avec OpenSSHv6.7 installés à partir de https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ . OpenSSHv6.7 est déjà installé.

    1. Son très buggy, et vous aurez besoin de le personnaliser fortement.

    2. La complétion de la commande ne fonctionne pas

    3. Il laissera des espaces vides lorsque vous déplacez le curseur sur le terminal

    4. Python ne fonctionne pas

    5. Les versions ultérieures d'OpenSSH ont peut-être été améliorées. D'autres MS semblent rendre OpenSSH disponible via Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Si vous êtes sur OSX ...

Quand j'ai essayé de l'exécuter avec username @ local: / file_directory ...

J'ai eu l'erreur suivante:

ssh: local: node name or service name not known

Solution

Sur mon Mac, je devais effectuer les opérations suivantes pour configurer localement ssh:

'Préférences Système' -> 'Internet et réseau' -> 'Partage' -> ACTIVER 'Connexion à distance'

Cela a ensuite fourni le nom d'utilisateur @ adresse ip.


-1

J'ai eu ce même problème aujourd'hui sur MAC.

Tapez la commande suivante:

scp /local-file-path/ /-remote-location-path/
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.