GNU/Linux >> Tutoriels Linux >  >> Linux

Comment revenir à scp local alors que j'ai déjà sshed sur une machine distante?

Sachant que vous avez un sshd s'exécutant sur votre machine locale, c'est possible et vous n'avez pas besoin de connaître votre adresse IP sortante. Si la redirection de port SSH est activée, vous pouvez ouvrir un tunnel sécurisé même si vous avez déjà une connexion ssh ouverte, et sans y mettre fin.

Supposons que vous ayez une connexion ssh à un serveur :

local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt  # now we have a file here

OK maintenant, nous devons recopier ce fichier sur notre serveur local, et pour une raison quelconque, nous ne voulons pas ouvrir une nouvelle connexion. OK, récupérons la ligne de commande ssh en appuyant sur Enter ~C (Entrée, puis tilde, puis C majuscule) :

ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward

C'est comme le -L/R/D normal options. Nous aurons besoin de -R , nous avons donc atteint Enter ~C à nouveau et tapez :

ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.

Ici, nous transférons le port 2222 du serveur distant vers le port 22 de la machine locale (et c'est là que vous avez besoin que le serveur SSH local soit démarré sur le port 22 ; s'il écoute sur un autre port, utilisez-le à la place du 22).

Maintenant, exécutez simplement scp sur un serveur distant et copiez notre fichier sur le port 2222 du serveur distant qui est mappé sur le port 22 de notre machine locale (où notre sshd local est en cours d'exécution).

remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt                   100%    4     0.0KB/s   00:00

Nous avons terminé !

remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc

Difficile, mais si vous ne pouvez vraiment pas lancez simplement scp depuis un autre terminal, pourrait aider.


J'ai trouvé que cette solution en une seule ligne sur SU était beaucoup plus simple que la réponse acceptée. Puisqu'il utilise une variable d'environnement pour l'adresse IP locale, je pense qu'il satisfait également la demande de l'OP de ne pas le savoir à l'avance.

sur cette base, voici une fonction bash pour "Télécharger" un fichier (c'est-à-dire pousser de la session SSH vers un emplacement défini sur la machine locale)

function dl(){
    scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}

Maintenant, je peux simplement appeler dl somefile.txt tout en SSH dans la télécommande et somefile.txt apparaît dans mon dossier Téléchargements local.

suppléments :

  • J'utilise des clés rsa (ssh-copy-id) pour contourner l'invite de mot de passe
  • J'ai trouvé cette astuce pour empêcher le bashrc local d'être sourcé lors de l'appel scp

Remarque :cela nécessite un accès SSH à la machine locale à distance (est-ce souvent le cas pour n'importe qui ?)


Linux
  1. Commande SCP Linux - Comment transférer un fichier SSH de distant à local

  2. Ssh - Copier un fichier sur le système local avec Ssh ?

  3. Comment télécharger un fichier local sur le serveur via un terminal Linux

  4. De VMware et Fedora 29 ssh à une machine distante cause un tuyau cassé

  5. Comment récupérer plusieurs fichiers d'une machine distante à une machine locale avec Ansible

Comment SSH dans un répertoire particulier sous Linux

Comment se connecter en SSH à un conteneur Docker

4 façons de transférer des fichiers entre des systèmes distants et locaux via SSH

Comment :Administration à distance de FreeBSD

Comment se connecter en SSH à WSL2 sur Windows 10 à partir d'une machine externe

Comment se connecter en SSH à une machine Windows 10 depuis Linux OU Windows OU n'importe où