Je souhaite télécharger un fichier à partir d'une session SSH active. Dans de nombreux cas , je probablement pourrais juste utiliser SFTP, scp
, rsync
et al , mais il y a des moments où j'ai des autorisations élevées sur le serveur distant d'une manière que je ne peux pas utiliser ces méthodes.
Si vous avez du mal à comprendre ce que je veux dire, imaginez que vous vouliez télécharger quelque chose à partir de /root/
ou /var/log/auth.log
. La connexion root est désactivée (car nous ne sommes pas des idiots). Comment obtenez-vous ce fichier? Copiez-le dans un endroit moins protégé, puis déplacez-le? C'est maladroit. Il existe également des scénarios dans lesquels le chemin d'accès distant est complexe ou temporaire, ou même s'il ne s'agit pas d'un chemin d'accès, car je souhaite que la sortie d'une commande distante soit stockée localement. Stocker à distance, puis copier? Clunk!
Il existe plusieurs manières plus maladroites d’obtenir des versions de celles-ci, mais dans un monde idéal, j’aurais quelque chose qui ressemble à un accès en écriture local à partir du serveur distant, en utilisant la session SSH existante comme conduit. Quelque chose comme (c'est juste une impression d'artiste):
$oli@remote: cp /root/cheesecake /local/
Et il apparaît juste dans mon local cwd
. Et l'accès bidirectionnel ne serait pas une mauvaise chose.
Cela fait huit longues années que je ne pose pas cette question et nous avons constaté une véritable gamme de problèmes, mais cela reste un problème avec lequel je suis toujours aux prises avec des difficultés.
J'ai reformulé la question en quelque chose de beaucoup plus idéaliste. Je comprends tout à fait qu’il n’existe peut-être pas actuellement de réponse parfaite. Tous les efforts passés et futurs vers mon idéal sont appréciés.
zssh
est probablement le plus proche du flux de travail semblable à zmodem dont vous vous souviendrez peut-être.Réponses:
Vous voudrez peut-être 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 fichier», qui vous permet de renvoyer des fichiers client, ou téléchargez-les du client au serveur.
Cependant, vous n'avez pas à réautoriser ou ouvrir une nouvelle fenêtre pour scp.
Si vous utilisez des clés ssh et un agent ssh, vous pouvez facilement faire:
Quel sera le fond ssh, puis juste
scp $!:/whatever/whatever .'
Une fois le fichier transféré,
fg
pour récupérer SSH.Si vous n'utilisez pas de 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
la source
En supposant que vous exécutiez un serveur ssh sur votre bureau (il existe des solutions, mais je pense qu'elles ajoutent toutes de la complexité, voire des problèmes de sécurité), vous pouvez configurer un tunnel ssh inversé. Voir SSH copier facilement le fichier sur le système local. plus à unix.SE .
~C
Enter-R 22042:localhost:22
Enterpour créer une redirection de port inverse de votre serveur vers votre bureau (22042 peut être n'importe quel numéro de port compris entre 1024 et 65534 non utilisé).scp -P 22042 foo localhost:
copiera le fichierfoo
dans votre répertoire actuel sur le serveur à votre domicile sur le bureau.~
Ctrl+ Zmv ~/foo .
Enterfg
Enter.Les séquences d'échappement Ssh commencent par
~
; le tilde n'est reconnu qu'après une nouvelle ligne.~ Ctrl+Z
met ssh à l'arrière-plan.~C
entre une ligne de commande où vous pouvez créer ou supprimer un transfert.la source
Je suis venu avec un moyen de faire cela avec SSH standard. C'est un script qui duplique la connexion ssh actuelle, trouve votre répertoire de travail sur la machine distante et copie le fichier que vous spécifiez sur la machine locale. Il nécessite 2 très petits scripts (1 distant, 1 local) et 2 lignes dans votre configuration ssh. Les étapes sont les suivantes:
Ajoutez ces 2 lignes à votre
~/.ssh/config
:Maintenant, si vous avez une connexion ssh à machineX ouverte, vous n’avez pas besoin de mots de passe pour en ouvrir un autre.
Créez un script d’une ligne sur la machine distante appelé
~/.grabCat.sh
Créez un script sur la machine locale appelée ~ / .grab.sh
et créez un alias pour grab.sh dans (
~/.bashrc
ou ailleurs):C'est tout, tout est fait. Maintenant, si vous êtes connecté à
machineX:/some/directory
, allumez un nouveau terminal et tapezCela place le fichier dans votre répertoire de travail actuel sur la machine locale. Vous pouvez spécifier un emplacement différent en tant que troisième argument à "saisir".
Remarque: il est évident que les deux scripts doivent être "exécutables", c'est-à-dire
chmod u+x filename
.la source
Si votre machine cliente (la machine sur laquelle vous êtes assis) s'appelle machineA et que la machine sur laquelle vous êtes actuellement connecté en SSH s'appelle machine B. MachineA, votre machine locale doit avoir le disque SSHD en cours d'exécution et le port 22 ouvert. Ensuite:
Copies
myfile
sur MachineB dans mon répertoire personnel MachineA sur machineA. Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.Copie d’
myfile
une/newdir/newname
machineB sur une machineA. Cela suppose que l'ID utilisateur / mot de passe sont les mêmes.Obtient une copie de
otherfile
mon répertoire MachineA sur MachineA et la place dans mon répertoire de travail actuel sur la machineB (désigné de manière 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 ne sont pas identiques, utilisez:
scp myfile user@MachineA:
obtenir un fichier.scp user@MachineA:/path/to/my/otherfile .
mettre des fichiersNOTES à propos de SCP:
Tout comme la
cp
commande, l'scp
option -p permet de propager les paramètres d'autorisation du fichier d'origine vers la copie (sinon, la copie est effectuée avec les paramètres normaux des nouveaux fichiers), et l'option -r de copier une arborescence de répertoires complète avec un seul. commander.scp
crée un canal de données crypté complètement transparent entre les deux machines, de sorte que les données binaires (telles que les images ou les programmes exécutables) sont conservées correctement. Cela signifie également qu’ilscp
est impossible d’effectuer une conversion automatique de la terminaison de fin de ligne entre différents types de systèmes d’exploitation, comme cela est possible avec ftp en mode "ascii". Cela ne posera pas de problème lors de la copie entre systèmes Unix, qui utilisent tous la même convention de fin de ligne.la source
si vous accédez au serveur via ssh, vous avez également la possibilité de vous connecter via sftp. Gardez filezilla client (GUI) à portée de main et collez le chemin sur lequel vous vous trouvez.
la source
Si votre fichier est suffisamment petit, vous pouvez le coder avec base64 puis le décoder localement:
Réponse originale d'où je viens (et testé) auprès de: https://unix.stackexchange.com/a/2869/194134
la source
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.
la source
get file
et qui apparaît comme par magie sur ma machine locale. Si cela doit se faire via un service tunnellisé sur SSH, qu’il en soit ainsi .. Mais il devrait être lié à une session.sshd
cours d' exécution. Vous devriez donc pouvoir utiliserscp
la ligne de commande du serveur pour renvoyer des fichiers au client. Il y a seulement tellement de magie à faire; il faut parfois appuyer sur les boutons. La solution FileZilla est également pratique.Ce n'est pas possible avec une session ssh par défaut, mais vous pouvez utiliser un script à la place de ssh, qui démarre comme un simple serveur ftp ou rsh sur votre système local et exécute ssh avec les options nécessaires pour reconfigurer un tunnel sur votre bureau. pour vous connecter à ce serveur.
la source
konsole
a cette possibilité via le menu "Edition-> ZModem Upload" pendant que vous êtes dans une session à distance (ou Ctrl-Alt-U).Remarque: le paquet
lrzsz
doit être installé en premier. Pour moi, cela ne fonctionne que pour le téléchargement de fichiers ASCII.la source
Étant donné que vous vous connectez à partir d’un ordinateur de bureau, je suppose que vous pouvez ouvrir un deuxième terminal.
Voici comment je fais souvent:
realpath myfile
ou dereadlink -f myfile
( ou des versions plus anciennes d'Ubuntu ne préinstallent pasrealpath
) et je le copie.scp
ousftp
pour obtenir le fichier, en collant le chemin complet que j'avais auparavant. Par exemple:scp user@host:/etc/some/file ./
C'est assez basique, mais c'est aussi facile à retenir et n'a besoin d'aucun paquet supplémentaire pour fonctionner.
la source
Étonnamment, je ne vois aucune mention du bon vieux commandant de minuit ici. À mon sens, c’est probablement le gestionnaire de fichiers le plus universel et le plus utile pour un shell doté de capacités puissantes, l’un des outils "indispensables" pour le boîtier, qui vous permet également de vous connecter via SSH, FTP, SFTP, etc. Dans le second panneau, vous pouvez ouvrir n’importe quel autre système de fichiers (votre local) et travailler ainsi librement avec les fichiers.
Tout ce dont vous avez besoin est: apt-get install mc (from universe)
Après cela, lancez mc, ouvrez le menu du panneau de gauche ou de droite, choisissez une connexion shell, entrez nomutilisateur @ remote-ip, le mot de passe - en fait, c'est tout .. copiez (ici: téléchargez) les fichiers / dossiers d'un ordinateur à un autre avec F5, déplacez-vous avec F6, etc. conformément aux boutons ci-dessous. Pour les anciens utilisateurs de MS: comme dans NC pour DOS
la source
Pensez-y, chers amis. Je cherchais toutes les réponses profondes, sombres et complexes. En fin de compte, vous pouvez le faire directement à partir de Dolphin. poisson: // nom d'utilisateur @ serveur: port
la source