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)?
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.
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?
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.
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
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.
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
scp -3 user1@remote1:/root/file1.txt user2@remote2:/root/file1.txt