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:
Aucune suggestion?
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 ~/
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
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.
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".
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.
$ unzip the_Zip_file.Zip -d destination_folder
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 :~/
Linux client
à Linux Server
Vérifiez si sshd
s'exécute sur votre serveur à l'aide de: ps aux | grep sshd
Sinon, installez OpenSSH
en utilisant Sudo apt-get install openssh-server openssh-client
https://www.tecmint.com/install-openssh-server-in-linux/
Redémarrez votre serveur et vérifiez que sshd
est en cours d'exécution à l'aide de ps aux | grep sshd
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
vérifiez que les ports sont ouverts à l'aide de netcat
nc -v -z 127.0.0.1 22
Pour copier des fichiers d'un client Linux
vers un client Linux
, utilisez scp comme suit scp ~/filename.md [email protected]:~/folder/filename.md
Pour vérifier que le fichier a été copié, utilisez ssh [email protected]
et indiquez votre mot de passe.
Linux client
à `WindowsIl existe plusieurs clients pour exécuter des serveurs SSH sous Windows tels que OpenSSH de MS
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
Comparaisons de ces serveurs:
Serveur SSH Bitvise
Fournit presque proche de l'invite cmd
native, de l'invite powershell
et de la saisie semi-automatique
Fournit des fonctionnalités supplémentaires pour la personnalisation, si vous avez besoin d'une utilisation avancée
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
.
Pour copier des fichiers à l'aide de scp, utilisez: scp ~/filename.md [email protected]:/C/Users/username/filename.md
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:
fournit un shell Linux sur les fenêtres où de simples commandes linux telles que ls
, cp
, find
etc. fonctionnent, similaires à MINGW64
vous pouvez accéder à cmd
et powershell
directement en tapant cmd
ou powershell
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 65001
set PYTHONIOENCONDING=utf-8
puis démarrage Python Prompt
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
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é.
Son très buggy, et vous devrez le personnaliser fortement.
L'achèvement de la commande ne fonctionne pas
Il laissera des espaces vides lorsque vous déplacez le curseur sur le terminal
Python ne fonctionne pas
Les versions ultérieures d'OpenSSH peuvent l'avoir amélioré. De plus, MS semble rendre OpenSSH disponible via Optional Features
https://developer.Microsoft.com/en-us/Microsoft-Edge/tools/vms/