web-dev-qa-db-fra.com

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

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

J'utilise Linux Mint et j'essaie de comprendre comment scp fonctionne.

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

Je me connecte à une machine distante en utilisant ssh, comme:

ssh -p 2222 username@domain

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

username@domain ~ $

maintenant, si j'émets 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 file.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:

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 d'autres informations.

Résumé de mes problèmes:

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

Aucune suggestion?

111
dragonmnl

Vous devez exécuter la commande scp à partir de la machine locale, pas sur la télécommande. Vous n'avez pas du tout besoin du ssh:

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 que vous souhaitez copier à partir de votre ordinateur local, vous devez vous assurer que votre ordinateur local est accessible via Internet et que ssh est configuré. Je ne pense pas que ce soit ce que vous recherchez, mais si c'est le cas, exécutez-le à partir de la télécommande:

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

Je propose deux méthodes de chargement/montée de fichier entre une machine distante et une machine locale (j'utilise Mac air):

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

1.

Copiez les fichiers du service dans le répertoire local: vous devez être dans le terminal bash local pour exécuter cette commande, pas lorsque vous êtes dans ssh!

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

copiez les fichiers dans le répertoire local vers le service distant: vous devez également être dans le terminal bash local

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

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

Cette commande ci-dessus est pour télécharger un fichier de distant vers local lorsque vous vous connectez à ssh, changez simplement les deux chemins lorsque vous voulez télécharger un fichier.

33
maizer

Si vous exécutez cette commande scp sur la machine distante, elle recherche file.ext en tant que fichier "local", c'est-à-dire sur la machine distante.

Pour copier un fichier de l'ordinateur distant vers l'ordinateur local, utilisez scp -P 2222 username@domain:dir/file.ext localdir (en admettant que file.ext est dans ~/dir sur l'ordinateur distant, comme dans votre exemple). Si vous exécutez scp sur la machine distante, inversez "local" et "remote".

5
alexis

Utilisez la commande scp

Si vous voulez transférer un dossier, juste Zip d'abord, nous pouvons unzip plus tard.

Depuis votre ordinateur, exécutez ceci:

$ scp your_path_to_the_file/the_file [email protected]:~/

Ici, root est votre compte et 10.145.198.100 est l'adresse IP du serveur distant. Nous allons copier the_file à ~/ dossier dans la télécommande.

Décompressez le fichier:

$ unzip the_Zip_file.Zip -d destination_folder
4
Catbuilts

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

Ce que je veux souligner ici, c'est que nous devons toujours ajouter que :~/

1
Billal Begueradj

Solution pour copier des fichiers depuis Linux client à Linux Server

  1. Vérifiez si sshd s'exécute sur votre serveur à l'aide de: ps aux | grep sshd

  2. Sinon, installez OpenSSH en utilisant Sudo apt-get install openssh-server openssh-clienthttps://www.tecmint.com/install-openssh-server-in-linux/

  3. Redémarrez votre serveur et vérifiez que sshd est en cours d'exécution à l'aide de ps aux | grep sshd

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

  5. vérifiez que les ports sont ouverts à l'aide de netcatnc -v -z 127.0.0.1 22

  6. Pour copier des fichiers d'un client Linux vers un client Linux, utilisez scp comme suit scp ~/filename.md [email protected]:~/folder/filename.md

  7. Pour vérifier que le fichier a été copié, utilisez ssh [email protected] et indiquez votre mot de passe.

Solution pour copier des fichiers depuis Linux client à `Windows

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

    MobaSSH

    serveur SSH Bitvise

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

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = in action = allow protocol = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = allow protocol = UDP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = in action = allow protocol = TCP localport = 22

    netsh advfirewall firewall add rule name = "SSH Port 22" dir = out action = allow protocol = TCP localport = 22

    netsh advfirewall éteint l'état de tous les profils

  3. Comparaisons de ces serveurs:

    Serveur SSH Bitvise

    1. Fournit presque proche de l'invite cmd native, de l'invite powershell et de la saisie semi-automatique

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

    3. La personnalisation de l'utilisateur pour les besoins simples est de 0. J'ai commencé à y travailler dans les 2 minutes, après avoir passé beaucoup de temps à essayer de faire fonctionner MobaSSH et OpenSSH.

    4. Pour copier des fichiers à l'aide de scp, utilisez: scp ~/filename.md [email protected]:/C/Users/username/filename.md

    5. Gratuit pour un usage personnel, 99 $ pour un usage professionnel. En raison de tant de fonctionnalités et d'une excellente intégration, le prix en vaut la peine

    MobaSSH:

    1. fournit un shell Linux sur les fenêtres où de simples commandes linux telles que ls, cp, find etc. fonctionnent, similaires à MINGW64

    2. vous pouvez accéder à cmd et powershell directement en tapant cmd ou powershell

    3. La prise en charge Unicode est médiocre. L'encodage n'est pas correct. Par exemple, si vous essayez de démarrer l'interpréteur Python, il se bloquera. Vous devrez modifier l'encodage manuellement à l'aide de ( https://stackoverflow.com/a/12834315/475288 ): chcp 65001set PYTHONIOENCONDING=utf-8 puis démarrage Python Prompt

    4. La grande chose à propos de MobaSSH est qu'il a une interface utilisateur très simple, et scp et ssh et bien intégré. Cela fonctionnera donc pour des cas d'utilisation simples

    5. Pour copier des fichiers d'un client Linux vers un serveur Windows exécutant MobaSSH: utilisez scp ~/filename.md [email protected]:/cygdrive/c/Users/username/filename.md Cela est dû au fait que MobaSSH est basé sur cygwin et que ses lecteurs sont mappés de la même façon que les lecteurs de cygwin.

    Utilisez des machines virtuelles de Microsoft avec OpenSSHv6.7 installé à 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 devrez le personnaliser fortement.

    2. L'achèvement 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 peuvent l'avoir amélioré. De plus, MS semble rendre OpenSSH disponible via Optional Featureshttps://developer.Microsoft.com/en-us/Microsoft-Edge/tools/vms/

0
alpha_989