J'ai une série de fichiers logiciels téléchargés dans mon sous-répertoire ~/Downloads
sur mon ordinateur personnel. J'utilise également bash pour me connecter à distance à un ordinateur en utilisant ssh
.
Est-il possible de transférer ce fichier via ssh
sur l'ordinateur distant?
this file
) et à plusieurs fichiers (a series of software files
), la meilleure solution dépend de si vous avez un seul fichier ou plusieurs fichiers.Réponses:
Vous voudrez peut-être utiliser
scp
à cette fin. Il s'agit d'un moyen sécurisé pour transférer des fichiers à l'aide du protocole SSH.Par exemple, pour copier un fichier nommé
yourfile.txt
de~/Downloads
vers un ordinateur distant, utilisez:Vous pouvez voir plus d'exemples ici .
la source
rsync
peut fonctionner aussi bien, maintenant que j'y pensescp
ci-dessus parrsync
et cela devrait très bien fonctionner.rsync
pour tout, même les fichiers simples, car cela "fonctionne" dans les cas simples et peut être beaucoup plus efficace dans d'autres cas. Si vous utilisez soitscp
oursync
sur quoi que ce soit pas déjà comprimé et / ou crypté, pensez à activer l'option de compression (-C
pourscp
,-z
ou--compress
pourrsync
). En fait, je l'allume par habitude - il est très rare que vous trouviez une circonstance où cela ralentit les choses (peut-être si vous utilisez un appareil lent à faible puissance avec une puissance CPI limitée comme un rPi).Bien que ce
scp
soit clairement le bon outil pour cela, si pour une raison quelconque vous ne pouvez pas l'utiliser, vous pouvez faire quelque chose comme ce qui suit à partir de votre machine locale pour copier, disons, une structure de répertoire sur la machine distante:Ce sera
tar
le répertoire en cours sur la machine locale, et écrire cetar
versstdout
lequel sera ensuite redirigé vers unessh
commande où il exécutera une commande à distance pour décompresser le fichier à partir duquel il litstdin
Modifié pour refléter le commentaire de Dietrich Epp sur
-f -
la valeur par défaut à la fois à la fin de la création et de l'extraction, il n'est donc pas nécessaire de le spécifier explicitement.la source
-C basedir
argument pourtar
extraire ailleurs que votre répertoire personnel si vous faites cela.Si vous voulez faire cela plus que rarement, je vous suggère de monter le système de fichiers distant
sshfs
si vous utilisez un type Unix qui prend en charge FUSE (Linux, * BSD, Mac OS X). Créez un répertoire sous votre répertoire personnel, par exemple, appelé ~ / remote-server:Montez ensuite le système de fichiers distant avec
sshfs
. Remplacez "yourserver.com" par le nom d'hôte de votre machine distante et "nom du répertoire distant" par le répertoire que vous utilisez sur le système distant.Une fois cela fait, le répertoire distant fait partie de votre système de fichiers et vous pouvez utiliser tous vos outils normaux dessus, y compris
cp
:Si vous ne l'avez pas déjà
sshfs
installé, vous devriez pouvoir l'installer sur votre ordinateur en utilisant votre gestionnaire de paquets (recherchez les paquets nomméssshfs
oufuse-sshfs
). Pour plus d'informations, vous pouvez lire un tutoriel en ligne .C'est d'ailleurs ma façon préférée de gérer les fichiers sur des serveurs distants. Je garde normalement un serveur de production et deux serveurs de développement montés de cette manière et j'utilise mon flux de travail de navigation de fichiers normal avec eux.
la source
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
et-C
pour la compression en cas de faible bande passante. Dès que cela fonctionne bien, j'ajoute personnellement des alias pour les commandes pour monter rapidement les systèmes de fichiers distants sur ssh. @Benjamin_Staton Je n'utiliserais pas sudo ou root ici, pas sans un mappage utilisateur / groupe approprié au moins.La première fois, il n'y a pas de réelle différence entre
scp
(copierssh
) etrsync
.Les exécutions suivantes bénéficieront du fait que rsync ne copiera pas les fichiers qui existent déjà.
-a
pour tous les fichiers-v
pour verbeux-H
pour "juste trouver des liens symboliques et faire la bonne chose"D'autres indicateurs utiles incluent:
--delete
pour supprimer les fichiers de la destination qui n'existent plus sur la source.--dry-run
pour les tests - très pratique lorsqu'il est combiné avec--delete
.Cela utilisera également des
ssh
clés pour effectuer une connexion sans mot de passe, si vous les avez configurés.À la fin de la course,
rsync
vous dira combien de fois plus rapide était de refaire la copie en clair.la source
-H
est en fait pour les liens durs, il empêche le même contenu d'être envoyé deux fois ou plus lorsqu'il est lié à plusieurs endroits dans la structure de répertoires source (mais peut rendre le processus moins efficace pour les grandes structures de répertoires). cela n'a aucun effet sur les liens symboliques, mais certaines des options incluses par-a
/--archive
affectent le traitement des liens symboliques.Pour ajouter aux réponses ci-dessus. Parfois, je ne suis pas exactement sûr du chemin distant. Dans ces cas, j'utilise
sftp
d'abord pour naviguer jusqu'à l'emplacement requis, puis j'utilise get ou put pour télécharger ou télécharger un fichier.Si vous souhaitez également garder quelque chose toujours synchronisé et même exécuter localement un fichier situé sur une machine distante, cela
sshfs
fonctionne très bien.la source
Je fais quelque chose de très similaire avec ssh. J'ai créé un outil de génération personnalisé pour Visual Studio et j'ai essentiellement VS exécuter une commande ssh qui copie mon code sur un ordinateur cible, puis le compile sur cet ordinateur cible.
Notez l'utilisation de guillemets simples et de points-virgules. Le premier encapsule vos commandes vers hostB via ssh et le second vous permet d'exécuter plusieurs commandes système hostB dans une seule commande ssh depuis hostA.
Pour que cela fonctionne, vous devrez configurer des clés ssh sur votre machine de démarrage afin que vous puissiez être userA @ hostA et vous connecter à hostB en tant qu'utilisateurB. Le processus de création d'une clé ssh publique pour userA @ hostA est bien documenté. Si vous ne créez pas de clé publique sur hostA pour userA et copiez cette clé dans hostB en tant qu'utilisateurB, vous serez alors obligé de saisir votre mot de passe à chaque fois - ce qui ruine le plaisir de l'automatisation.
la source