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


Donc, je suis SSHed sur mon serveur Ubuntu à partir de mon bureau Ubuntu. Je suis sur 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'avais 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 maintenant), sûrement Il doit exister un moyen simple de récupérer un fichier via une connexion SSH active.

Sûrement!


83
2017-11-15 14:59


origine


Question interessante! Cela montre vraiment comment les outils qu’ils utilisent façonnent les idées des gens. zssh est probablement le plus proche du workflow de type zmodem dont vous vous souvenez peut-être. - poolie
Je suis vraiment surpris que même après 8 réponses, il n'y a pas vraiment de moyen de le faire - endolith


Réponses:


Vous voudrez peut-être vérifier zssh, qui est 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 d'envoyer des fichiers vers votre machine client, 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:

[enter]~[ctrl]-Z

Qui va fonder ssh, puis juste scp $!:/whatever/whatever .'

Une fois le fichier transféré, fg pour revenir 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 compliqué, vérifiez man ssh_config


32
2017-11-17 00:46





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é. Voir SSH copie facilement le fichier au système local. plus à unix.SE.

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

Séquences d'évasion Ssh commencer avec ~; le tilde n'est reconnu qu'après une nouvelle ligne. ~ Ctrl+Z met ssh en arrière-plan. ~C entre dans une ligne de commande où vous pouvez créer ou supprimer un transfert.


24
2017-11-15 22:37



Utiliser 2 couches de cryptage et de compression est un peu exagéré, c'est pourquoi j'ai suggéré d'utiliser rsh ou ftp pour le "back link". - JanC
@JanC: Cela nécessite plus de configuration: vous devez installer un serveur rsh ou ftp et vous assurer que sa configuration est sécurisée. La surcharge de chiffrement est minime, même sur un netbook. - Gilles
Un serveur ssh n'est pas installé par défaut non plus. ;) - JanC
@JanC: Un autre avantage de ssh est que si vous avez activé le transfert d'agents, vous n'avez pas besoin de saisir un mot de passe pour effectuer la copie. Efficacité du workflow par rapport à l'efficience informatique. - Gilles
Vous pouvez faire quelque chose comme ça avec (certains) autres services aussi bien sûr. Dans tous les cas, il existe plusieurs solutions similaires qui impliquent toutes la configuration d'une connexion tunnelée et d'un démon supplémentaire ...;) - JanC


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)"/$1
    
  3. Créez un script sur la machine locale appelée ~ / .grab.sh

    \#!/bin/bash
    [ -n "$3" ] && dir="$3" || dir="."
    ssh "$1" ".grabCat.sh $2" > "$dir/$2"
    
  4. et faire un alias pour grab.sh dans (~/.bashrcou ailleurs):

    alias grab=~/.grab.sh
    

C'est tout, tout est fini. 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 l'ordinateur local. Vous pouvez spécifier un autre emplacement comme troisième argument pour "saisir".

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


10
2017-11-30 10:29



Intéressant, pourriez-vous expliquer comment cela fonctionne? Pouvez-vous étendre cela pour prendre en charge les fichiers de mise en forme et les récupérer? - Peter Gibson


Si votre machine cliente (la machine sur laquelle vous êtes assis) s'appelle machineA et que la machine sur laquelle vous êtes actuellement SSH s'appelle la machine B. MachineA, votre machine locale doit avoir SSHD en cours d'exécution et le port 22 ouvert. Alors:

scp myfile machineA:

Copies myfile sur MachineB vers mon ordinateur Un répertoire personnel sur machineA. Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.

scp myfile machineA:/newdir/newname

Copies myfile un 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 le 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 le nom d'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 .  mettre des fichiers

NOTES sur SCP:

Juste comme le cp commander, 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 une option -r pour 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 est incapable d'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.


5
2017-12-07 19:39





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 actuellement

enter image description here


2
2017-11-16 01:12



Cela bénéficierait de plus de détails, y compris comment se connecter à un serveur SSH avec FileZilla (ce n'est pas évident). Les captures d'écran peuvent également aider, en plus du texte explicatif. - Eliah Kagan


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


1
2017-11-15 16:11



Je suis au courant de scp mais c'est un workflow très décousu. Si je travaille dans un répertoire distant donné, je dois obtenir le chemin d'accès distant, me déconnecter (ou créer un autre shell), faire l'écriture des chemins, puis me reconnecter. Je cherche quelque chose qui ressemble à l'écriture get file et il apparaît comme par magie sur ma machine locale. Si cela doit être fait via un service tunnellé sur SSH, soyez-le .. Mais il devrait être lié à la session. - Oli♦
De plus, il a été remplacé par sftp (voir ma réponse) - Olivier Lalonde
@Oli - Comme les deux extrémités de la transaction sont des * nix cases, elles ont probablement toutes les deux sshd en cours d'exécution et donc vous devriez être capable d'utiliser scp sur la ligne de commande du serveur pour renvoyer les fichiers au client. Il n'y a que peu de magie à faire; Parfois, nous devons toujours appuyer sur les boutons. La solution FileZilla est également pratique. - zerobandwidth


Ce 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.


1
2017-11-15 17:45





konsole a cette possibilité via le menu "Edit-> ZModem Upload" lorsque vous êtes dans une session distante (ou Ctrl-Alt-U).

S'il vous plaît noter: paquet lrzsz doit être installé en premier Pour moi, cela ne ressemble à des travaux que pour le téléchargement de fichiers ASCII.


1
2017-09-13 20:58