ProxyJump
Nouveau dans OpenSSH 7.3 :
A$ scp -oProxyJump=B thefile C:destination
(En coulisses, cela utilise simplement ProxyCommand et ssh -W
.)
ProxyCommand
Mis à jour pour inclure les -W des autres réponses :
A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination
Si A a installé un très vieux client SSH (sans -W
), ou si B est configuré pour interdire le transfert TCP (mais autorise toujours les commandes Shell), utilisez des alternatives :
A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination
Tuyaux
A$ tar cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""
Pour un seul fichier :
A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile
"Tunnel" à travers B
A$ ssh -f -N -L 4567:C:22 B
(continues running in background)
A$ scp -P 4567 thefile localhost:destinationPath
Lorsque vous avez terminé, n'oubliez pas de tuer le programme précédemment lancé. ssh
(qui est passé à l'arrière-plan en raison de -f -N
).
-
-f
Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande. C'est utile si ssh doit demander des mots de passe ou des phrases de passe, mais que l'utilisateur veut qu'il soit en arrière-plan. Ceci implique -n.
-
-N
N'exécutez pas une commande à distance. Cette option est utile pour le transfert de ports.
Tunnel inversé à travers B vers A
Mais ça ne marche pas toujours :
A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)
B$ scp -P 4567 localhost:thefile C:destination
-
-R
Spécifie que les connexions au port TCP ou au socket Unix donné sur l'hôte (serveur) distant doivent être transférées à l'hôte et au port donnés, ou au socket Unix, du côté local.