Est-il possible de SCP d'un distant au local tout en étant connecté au distant et sans connaître l'adresse IP du local?

31

Je me retrouve régulièrement à vouloir copier un fichier d'une session de terminal distant sur ma machine locale. Habituellement, je me déconnecte de la session distante et appelle un transfert scp du local pour copier le fichier du distant au local. Mais cela semble un peu long. Je voudrais transférer le fichier tout en étant connecté à la télécommande via SSH pour gagner du temps. Ma machine locale est connectée à Internet à partir d'une plage IP dynamique, je ne sais donc pas trop comment me connecter à distance. Mais sûrement, comme la session distante provient de mon ordinateur portable, il doit y avoir un raccourci dans scp pour revenir à mon ordinateur portable ...

jnthnclrk
la source

Réponses:

20

Vous pouvez utiliser le tunneling SSH pour cela.

À l'aide du tunneling, vous pouvez transférer un port TCP soit de votre machine locale vers la machine distante, soit de la machine distante vers votre machine locale. Je l'utilise fréquemment pour transmettre, par exemple, des ports SMTP ou IMAP d'une machine distante derrière un pare-feu à ma machine locale (puis accéder aux services localement, comme s'ils fonctionnaient localement).

Pour transférer le port 22 (SSH) de votre ordinateur local vers l'ordinateur distant, essayez ceci:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Notez que localhost fait référence au nom local de la machine distante)

Après avoir exécuté ceci, vous devriez pouvoir rentrer chez vous en utilisant ssh:

ssh -p12345 [email protected]

Lorsque vous utilisez scp, vous feriez quelque chose comme (scp a un P majuscule pour la redirection de port):

scp -P12345 filename 127.0.0.1:/tmp/filename

La redirection de port dans l'autre sens (de distant à local) utilise -L au lieu de -R.

Les commandes ci-dessus supposent que vous utilisez un client ssh terminal. Les clients graphiques, comme PuTTY pour Windows, prennent également en charge le tunneling

Daniel Lundmark
la source
Ne répond pas à la question d'OP dont l'IP n'est pas statique.
2
Sauf si j'ai raté quelque chose, cela devrait bien permettre à l'OP de se connecter de la machine actuellement distante au local. Le tunneling sera effectué via la session SSH. Comme la connexion SSH est configurée de la machine locale dynamique vers la télécommande, elle réussira et pourra ainsi configurer un port d'écoute sur la machine distante qui tunnelise d'où elle vient.
Cela nécessitera que OP configure le serveur SSH sur sa machine locale et s'occupe de l'authentification. Cela peut donc être plus problématique que cela ne vaut dans certains cas d'utilisation.
septembre
Non seulement cela fonctionne pour les adresses IP dynamiques, mais cela fonctionne également sur les pare-feu qui interdisent les connexions ssh de distant à local. Réponse très utile!
3
Vous pouvez le rendre encore plus pratique en définissant la redirection de port à distance avec l' ~Cévasion. Tapez simplement <Enter>~C-R 12345:localhost:22<Enter>, et vous avez votre tunnel sans quitter votre session SSH déjà établie.
6

Essayez ce qui suit dans la ligne de commande de la machine distante, vous devrez peut-être activer la redirection de port sur votre routeur.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Source: scpez facilement un fichier vers l'hôte à partir duquel vous vous connectez (commandlinefu.com)

Patrick McLaren
la source
1
Pour expliquer ce que cela fait pour les personnes rencontrées, ${SSH_CLIENT%% *}affichez l'IP de votre machine locale. Donc, toute la commande ouvre une session scp de la machine distante à votre machine locale pour le transfert de fichiers. Cela ne peut être fait que si vous pouvez SSH sur votre ordinateur local à partir de l'ordinateur distant.
bizi
2
Cela peut être encore amélioré en ajoutant quelque chose comme export ME="${SSH_CLIENT%% *}"dans votre fichier shell rc. Vous pouvez ensuite simplement utiliserscp <file> $ME:<local path>
kralyk
Génial, cela fonctionne, mais notez: si vous vous connectez via VPN, les fichiers ne se retrouveront pas sur votre machine, mais ailleurs.
kap
1

Peut-être zssh ?

zssh (Zmodem SSH) est un programme pour transférer de manière interactive des fichiers vers une machine distante tout en utilisant le shell sécurisé (ssh). Il est destiné à être une alternative pratique à scp, permettant de transférer des fichiers sans avoir à ouvrir une autre session et à s'authentifier à nouveau.

zssh est un wrapper interactif pour ssh

Il utilise les vénérables implémentations rz, sz du transfert de fichiers zmodem.

RedGrittyBrick
la source
1

J'ai voté pour cette question, c'est quelque chose que j'aimerais aussi réaliser facilement .

Voici la réponse connexe: Comment puis-je SCP d'une machine distante à une machine locale lorsque je suis en dehors de mon réseau domestique?

Vous devez autoriser l'accès à ssh depuis l'extérieur de votre réseau. Cela se fait en redirigeant un port sur votre routeur à large bande vers la lan ip de votre serveur. Cependant, il y a des problèmes de sécurité à autoriser l'accès ssh de l'extérieur, vous pouvez donc également rechercher des méthodes pour sécuriser ssh, en particulier l'authentification par clé et désactiver complètement l'authentification par mot de passe.

Mars Robertson
la source
0

Une solution serait de suspendre la session ssh sur la machine locale, d'effectuer la copie sur la machine locale, puis de reprendre votre session ssh là où vous l'aviez interrompue.

Par exemple, supposons que je suis connecté à myuser @ remote et que je souhaite copier le fichier lol.txt sur mon ordinateur local. Je veux d'abord suspendre ssh sur ma machine locale. Normalement, vous utiliseriez Ctrl- Zpour suspendre, mais cela ne fonctionnera pas dans ssh car il sera envoyé au shell distant. Au lieu de cela, vous devez utiliser la séquence d'échappement ssh Enter~. Donc, pour suspendre la presse ssh Enter~ Ctrl- Z. Vous pouvez maintenant exécuter des commandes sur votre ordinateur local et pouvez le faire

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

pour copier le fichier, puis revenir à ssh exactement où vous l'avez laissé

user@localmachine:~$ fg


la source
mais le problème n'est pas la copie à distance, le problème est la copie à distance, je ne vois pas comment la suspension du shell fait quoi que ce soit pour résoudre ce problème ...
alex
Eh bien, cela fonctionne aussi dans l'autre sens. L'idée est simplement de suspendre la session au lieu de la quitter, ce qui la rend au moins un peu plus facile.
Steen Schütt
0

Si vous voulez une solution plus simple, ouvrez simplement un compte dropbox, allez sur la machine distante et faites wget (version modifiée d' ici ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

alex
la source