web-dev-qa-db-fra.com

Comment puis-je télécharger un fichier à partir d'un hôte sur lequel je ne peux que SSH via un autre hôte?

Je souhaite télécharger des fichiers de mon ordinateur de bureau vers mon ordinateur portable.

Je peux connecter mon ordinateur de bureau par SSH au serveur d'organisation, puis SSH du serveur à mon ordinateur de bureau.

Les seules commandes acceptées par le serveur d'organisation sont ssh, ssh1 et ssh2.

Comment puis-je télécharger un fichier depuis mon ordinateur de bureau (distant) via le serveur vers mon ordinateur portable (local)?

31
Yohai Magan

Les réponses précédentes mentionnent comment utiliser la directive ProxyJump (ajoutée dans OpenSSH 7.3) pour se connecter via un serveur intermédiaire (généralement appelé hôte bastion), mais le mentionnent uniquement comme argument de ligne de commande.

À moins que ce soit une machine que vous ne connecterez pas à l'avenir, la meilleure chose à faire est de la configurer sur ~/.ssh/config.

Je mettrais un fichier comme:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

Si vous utilisez une version antérieure d'OpenSSH qui ne prend pas en charge ProxyJump, vous devez la remplacer par l'équivalent:

ProxyCommand ssh -W %h:%p bastion-machine

et si votre version ssh locale était très ancienne et ne supportait pas -W:

ssh bastion-machine nc %h %p

bien que ce dernier nécessite que la machine bastion ait nc installée.

La beauté de ssh est que vous pouvez configurer chaque destination sur le fichier, et elles s'empileront très bien. Vous finissez donc par travailler avec office-machine comme nom d'hôte sur tous les outils (ssh, scp, sftp ...) car ils étaient des connexions directes, et ils découvriront comment se connecter en se basant sur ssh_config. Vous pouvez également avoir des caractères génériques comme Host *.internal.company.local pour que tous les hôtes se terminant comme ça passent par un bastion spécifique, et cela s'appliquera à tous. Une fois configuré correctement, la seule différence entre faire une connexion à un saut ou vingt serait les temps de connexion plus lents.

37
Ángel

Si vous avez un OpenSSH récent (8.0), vous pouvez utiliser le -J (saut) interrupteur :

scp -J user@intermediate user@target:/path

Avec les versions plus anciennes (mais au moins 7.3), vous pouvez utiliser directive ProxyJump , soit en ligne de commande:

scp -o ProxyJump=user@intermediate user@target:/path

ou dans ssh_config file, comme le montre la réponse de @ Ángel.


Il existe d'autres options comme ProxyCommand ou la redirection de port, que vous pouvez utiliser sur des versions encore plus anciennes d'OpenSSH. Celles-ci sont couvertes par OpenSSH prend-il en charge la connexion multi-boutiques?

37
Martin Prikryl

Parfois, nous pouvons simplement utiliser le pipeline. Cette heure est aujourd'hui.

ssh -A user@Host1 ssh user@Host2 cat filename > filename

Vous pouvez également télécharger

ssh -A user@Host1 ssh user@Host2 cat \\\> filename < filename

Oui, il existe d'autres solutions impliquant le proxy, etc., mais savoir comment le faire est utile.

10
Joshua

Utilisez la configuration ProxyJump:

ProxyJump
Spécifie un ou plusieurs proxys de saut en tant qu'hôte [utilisateur @] [: port] ou URI ssh. Plusieurs proxys peuvent être séparés par des virgules et seront visités séquentiellement. La définition de cette option entraînera la connexion de ssh (1) à l'hôte cible en établissant d'abord une connexion ssh (1) avec l'hôte ProxyJump spécifié, puis en établissant un TCP transfert vers la cible ultime à partir de là .

scp -o ProxyJump=user@intermediate user@target:/path
7
RalfFriedl

Il existe un ancien protocole appelé ZMODEM : peu de programmes le supportent de nos jours, mais quand il fonctionne, il peut être assez pratique.

Vérifiez d'abord si le programme de terminal de votre ordinateur portable prend en charge ZMODEM. (Par exemple, vous pouvez configurer iTerm2 (sur Mac) pour prendre en charge ZMODEM. Un exemple de script est disponible ici .)

Sur votre ordinateur de bureau, exécutez: Sudo apt install lrzsz

Maintenant, tout ce que vous avez à faire est de lancer ssh sur votre ordinateur de bureau et d'exécuter sz (filename). Le fichier sera téléchargé via votre terminal.

2
jick

Configuration sous ssh de l'utilisateur: ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

Vous pouvez maintenant copier du serveur intranet directement sur serveur de saut.

scp [email protected]:/home/user/ ./*

Je préfère cela car il n'est plus nécessaire de spécifier des serveurs de saut avec scp

1
Lukáš Viktora

Via SCP -3:

scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt
0
wuseman