Télécharger un fichier sur une session SSH active

83

Je suis donc SSH sur mon serveur Ubuntu depuis mon bureau Ubuntu. Je suis à un certain chemin et je veux télécharger un fichier sur mon système de fichiers local (de préférence le chemin que j'étais avant d'entrer dans la session SSH).

Je pourrais monter SSH et extraire le fichier par la souris, mais que faire si j'essayais d'obtenir un fichier racine et que la connexion directe avec root est interdite? Même si ce n’était pas le cas (ce n’est pas le cas actuellement), surement il doit y avoir un moyen simple de récupérer un fichier sur une connexion SSH active.

Bien sûr!

    
posée Oli 15.11.2010 - 15:59
la source

11 réponses

32

Vous pouvez consulter zssh , disponible dans l'Univers, et donc disponible avec

sudo apt-get install zssh

Vous en avez besoin sur votre serveur Ubuntu et sur votre client, mais lorsque vous êtes connecté avec zssh, il vous suffit d'appuyer sur "Ctrl- @" pour afficher le "Mode de transfert de fichiers" qui vous permet de renvoyer les fichiers. tuyau vers votre machine cliente, ou téléchargez-les du client vers le serveur.

Cependant, vous n'avez pas besoin de réauthentifier ou d'ouvrir une nouvelle fenêtre pour scp.

Si vous utilisez des clés ssh et un agent ssh, vous pouvez très facilement faire:

[enter]~[ctrl]-Z

Qui sera en arrière-plan ssh, puis juste scp $!:/whatever/whatever .'

Une fois le fichier transféré, fg pour récupérer ssh.

Si vous n'utilisez pas les clés ssh, vous pouvez toujours utiliser les options "ControlMaster" et "ControlPath" ajoutées aux versions récentes d'OpenSSh, mais cela devient délicat, vérifiez man ssh_config

    
réponse donnée SpamapS 17.11.2010 - 01:46
la source
24

En supposant que vous exécutiez un serveur ssh sur votre bureau (il existe des moyens de contourner cela, mais je pense qu'ils ajoutent tous de la complexité, et ont probablement des problèmes de sécurité), vous pouvez configurer un tunnel ssh inversé. Consultez SSH pour copier facilement les fichiers sur le système local. sur unix.SE .

  • Entrez Entrez ~C Entrez -R 22042:localhost:22 Entrez pour créer un transfert de port inversé de votre serveur vers votre bureau (22042 peut être tout numéro de port non utilisé entre 1024 et 65534).
  • Ensuite, scp -P 22042 foo localhost: copiera le fichier foo dans votre répertoire actuel sur le serveur vers votre domicile sur le bureau.
  • Déplacez maintenant le fichier dans votre répertoire actuel sur le bureau en tapant Entrez ~ Ctrl + Z mv ~/foo . Entrez fg Entrez .

Les séquences d'échappement Ssh commencent par ~ ; le tilde n'est reconnu qu'après une nouvelle ligne. ~ Ctrl+Z met ssh en tâche de fond. ~C entre dans une ligne de commande où vous pouvez créer ou supprimer un transfert.

    
réponse donnée Gilles 15.11.2010 - 23:37
la source
10

J'ai trouvé un moyen de le faire avec ssh standard. C'est un script qui duplique la connexion ssh actuelle, trouve votre répertoire de travail sur la machine distante et recopie le fichier que vous avez spécifié sur la machine locale. Il faut 2 très petits scripts (1 distant, 1 local) et 2 lignes dans votre configuration ssh. Les étapes sont les suivantes:

  1. Ajoutez ces 2 lignes à votre ~/.ssh/config :

    ControlMaster auto
    ControlPath ~/.ssh/socket-%r@%h:%p
    

    Maintenant, si vous avez une connexion ssh à machineX ouverte, vous n'aurez pas besoin de mots de passe pour en ouvrir un autre.

  2. Créez un script sur une ligne sur la machine distante appelée ~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Créez un script sur la machine locale appelée ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. et créez un alias pour grab.sh dans ( ~/.bashrc ou n'importe où):

    alias grab=~/.grab.sh
    

C'est tout, tout est fait. Maintenant, si vous êtes connecté à machineX:/some/directory , lancez simplement un nouveau terminal et tapez

grab machineX filename

Cela place le fichier dans votre répertoire de travail actuel sur la machine locale. Vous pouvez spécifier un autre emplacement comme troisième argument pour "saisir".

Remarque: les deux scripts doivent évidemment être "exécutables", c’est-à-dire chmod u+x filename .

    
réponse donnée user6702 30.11.2010 - 11:29
la source
5

Si votre machine cliente (la machine sur laquelle vous êtes assis) est appelée machineA et que la machine sur laquelle vous êtes actuellement SSH est appelée machine B. MachineA, SSHD doit être exécuté sur votre machine locale et le port 22 ouvert. Alors:

scp myfile machineA:

Copie myfile sur MachineB dans mon répertoire personnel MachineA sur machineA. Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.

scp myfile machineA:/newdir/newname

Copies myfile one MachineB à /newdir/newname sur machineA. Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.

scp MachineA:/path/to/my/otherfile . 

Obtient une copie de otherfile de mon répertoire MachineA sur MachineA et la place dans mon répertoire de travail actuel sur la machine MachineB (désignée sous la forme UNIX standard par le caractère "point" (.)). Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.

Si l'ID utilisateur / mot de passe n'est pas le même, utilisez:

scp myfile user@MachineA: pour obtenir le fichier.

scp user@MachineA:/path/to/my/otherfile . pour mettre des fichiers

NOTES sur SCP:

Tout comme la commande cp , scp a une option -p pour propager les paramètres d'autorisation du fichier d'origine à la copie (sinon la copie est effectuée avec les paramètres normaux pour les nouveaux fichiers), et -r Option permettant de copier une arborescence complète avec une seule commande.

scp crée un canal de données crypté complètement transparent entre les deux machines, afin que les données binaires (telles que les images ou les programmes exécutables) soient conservées correctement. Cela signifie également que scp ne peut pas effectuer la conversion automatique de terminaison de fin de ligne entre différents types de systèmes d'exploitation, comme cela peut être fait avec ftp en mode "ascii". Ce ne sera pas un problème lors de la copie entre systèmes Unix, qui utilisent tous la même convention de fin de ligne.

    
réponse donnée LukeInDC 07.12.2012 - 20:39
la source
2

Si vous accédez au serveur via ssh, vous avez également la possibilité de vous connecter via sftp. Gardez le client filezilla (GUI) à portée de main et collez le chemin sur lequel vous vous trouvez

    
réponse donnée jet 16.11.2010 - 02:12
la source
1

Ce n'est pas sur la connexion SSH active, mais scp copie les fichiers en utilisant les mêmes mécanismes et autorisations que ssh.

    
réponse donnée msw 15.11.2010 - 17:11
la source
1

Ceci n’est pas possible avec une session ssh par défaut, mais vous pouvez utiliser un script au lieu de ssh, qui lance quelque chose comme un simple serveur ftp ou rsh sur votre système local et exécute ssh avec les options nécessaires pour configurer un tunnel. sur votre bureau pour vous connecter à ce serveur.

    
réponse donnée JanC 15.11.2010 - 18:45
la source
1

konsole a cette possibilité via le menu "Edit- & gt; ZModem Upload" lorsque vous êtes en session distante (ou Ctrl-Alt-U).

Veuillez noter que le package lrzsz doit être installé en premier. Pour moi, cela ne ressemble à des travaux que pour le téléchargement de fichiers ASCII.

    
réponse donnée jet 13.09.2015 - 22:58
la source
1

Si votre fichier est suffisamment petit, vous pouvez l’encoder avec base64 puis le décoder localement:

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(copy the output)
Ctrl+D

Réponse originale où je l'ai eu (et testé) depuis: lien

    
réponse donnée wesalius 20.01.2017 - 20:17
la source
0

Comme vous vous connectez depuis un ordinateur de bureau, vous pouvez ouvrir un deuxième terminal.

C'est comme ça que je fais souvent:

  • du premier terminal, celui où la session ssh est en cours d'exécution, j'obtiens le chemin complet du fichier que je dois obtenir, en utilisant soit realpath myfile ou readlink -f myfile (les anciennes versions d'Ubuntu ne préinstallent pas realpath ) et le copier.
  • à partir du deuxième terminal, j'utilise scp ou sftp pour obtenir le fichier, en collant le chemin complet que j'ai reçu auparavant. Par exemple: scp user@host:/etc/some/file ./

C'est assez simple, mais il est également facile à retenir et ne nécessite aucun paquet supplémentaire pour fonctionner.

    
réponse donnée gerlos 20.01.2018 - 10:59
la source
0

Etonnamment, je ne vois aucune mention du bon vieux Midnight Commander ici. A mon avis, c'est probablement le plus universel. gestionnaire de fichiers utile pour shell avec des capacités d'alimentation, l'un des outils indispensables pour le cas, qui vous permet également de vous connecter via SSH, FTP, SFTP également, tandis que sur le second panneau, vous pouvez en ouvrir d'autres (votre local) et donc de travailler librement avec les fichiers.

Tout ce dont vous avez besoin est: apt-get install mc (de l'Univers)

Ensuite, lancez mc, ouvrez le menu du panneau gauche ou droit, choisissez la connexion shell, entrez le nom d'utilisateur @ remote-ip, le mot de passe - en fait, c'est ça .. copiez (ici: téléchargez) les fichiers / dossiers d'une machine à un autre avec F5, déplacez-vous avec F6, et ainsi de suite selon les boutons ci-dessous. Pour les anciens utilisateurs de MS: comme pour NC pour DOS

    
réponse donnée Nex0 04.07.2018 - 15:10
la source

Lire d'autres questions sur les étiquettes