J'ai accès à 3 machines, A, B et C. Les seules connexions possibles (ssh) sont:
A -> B
B <-> C
Je dois obtenir des fichiers de A à C pour pouvoir scp les fichiers de A à B, puis de B à C. Toutefois, B ne disposant pas de beaucoup d'espace disque, ce n'est donc pas une option. Est-il possible de scp des fichiers de A à C via B? Notez que je ne dispose pas d'un accès root sur aucune des machines. Ne pensez donc pas que je peux configurer des tunnels persistants, mais corrigez-moi si je me trompe!
A$ rsync <options> -e 'ssh B ssh' source C:destination
Réponses:
ProxyJump
Nouveau dans OpenSSH 7.3:
(En coulisse, cela n’utilise que ProxyCommand et
ssh -W
.)ProxyCommand
Mise à jour pour inclure -W à partir d'autres réponses:
Si A possède un très ancien client SSH installé (sans
-W
support) ou si B est configuré pour interdire le transfert TCP (tout en autorisant les commandes shell), utilisez des alternatives:Les pipes
Pour un seul fichier:
"Tunnel" à travers B
Lorsque vous avez terminé, n'oubliez pas de supprimer le
ssh
processus précédemment lancé (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. Ceci est utile si ssh va demander des mots de passe ou des phrases secrètes, mais que l'utilisateur le souhaite en arrière-plan. Cela implique -n.-N
N'exécutez pas de commande à distance. Ceci est utile pour simplement transférer des ports.Inverser le "tunnel" par B à A
Ne fonctionne pas toujours bien:
-R
Spécifie que les connexions au port TCP ou au socket Unix indiqué sur l'hôte distant (serveur) doivent être transférées vers l'hôte et le port donnés, ou le socket Unix, du côté local.la source
scp
de C, bien que B, à A, vous pouvez le faireA$ scp -oProxyJump=B C:destination thefile
.Les versions de scp de début 2011 et ultérieur peuvent avoir une option "-3":
Si vous avez cela, vous pouvez simplement lancer:
la source
Presque tout a déjà été dit mais voici mon dernier sou: j'utilise la variante ProxyCommand sans
nc
nisoc
. Basé sur OpenSSH Proxies et Jumphost Cookbook, j'ai conçu la configuration suivante:Nous avons donc les joueurs suivants:
J'ai d'abord ajouté la clé publique locale de mon hôte
.ssh/id_dsa.pub
d'origine.ssh/authorized_keys
aux hôtes cible et cible. Oui, la même clé publique de l'hôte d'accueil pour les deux. En général, vous vous attendez à ce que ce soit la clé publique HOP que vous devez ajouter à la clé TARGET.Ensuite, j'ai modifié
.ssh/config
un peu en ajoutant l'entrée suivante:Après que l'opération de copie est aussi simple que:
scp FILE TARGET_HOST:
. Il affiche les doubles bannières des nœuds hop et cible, mais cela fonctionne.Bien sûr , vous pouvez utiliser ci - dessus pour ssh directement à la cible:
ssh TARGET_HOST
. Cela fonctionne avec scp et ssh.Une autre option plus générale pourrait être l’ utilitaire sshuttle , qui semble être une sorte de proxy transparent (vpn over ssh). Donc dans votre cas de A-> B <-> C cela permet de vous connecter à chaque nœud du réseau de C: A-> B- [CDEFG]. Il n’a pas besoin d’admin, mais nécessite Python 2.7 (3.5 aussi OK), ce qui n’est pas toujours ce que nous avons. Cela vaut la peine de l'essayer.
la source
dans une autre coquille:
Ceci utilise le transfert de port. La seule limitation ici est que l'hôte B doit être configuré pour autoriser le transfert de port. Sinon, cela devrait fonctionner correctement.
Dans le sens de l'explication,
-L
et-R
vous permettent de transférer des ports. Le-L
premier port indiqué est que ssh commencera à écouter sur la machine d'origine (hôte A) et transmettra tout ce qu'il recevra sur ce port via votre connexion SSH à l'hôte B, puis sera acheminé vers l'hôte C sur le port 22.modifier
J'ai un peu foiré la syntaxe. Il établit une avance sur votre machine locale.
la source
La réponse ProxyCommand de Grawity a fonctionné pour moi, mais comme je suis moins familier avec SSH, il a fallu des expériences. Je pensais épeler plus en détail la réponse de Grawity pour aider les autres débutants de SSH comme moi. Voici les définitions pour la notation plus explicite:
Machine A: la machine sur laquelle vous vous trouvez
Serveur B: [email protected] (hôte de saut ou serveur intermédiaire)
Serveur C: [email protected] (le serveur distant sur lequel vous souhaitez copier)
ProxyCommnad
Exemple concret
Donc, pour un exemple concret, disons que vous avez accès à un serveur avec IP
0.0.1.2
avec un compte d'utilisateur nommébar
(Serveur C). Mais pour y arriver, vous devez d'abord vous connecter à un serveur avec IP0.0.1.1
avec un compte d'utilisateur nomméfoo
(Serveur B). Vous souhaitez maintenant copier le fichierbaz.txt
situé sur votre ordinateur actuel (ordinateur A) dans0.0.1.2
le/home/bar/
répertoire du serveur . Pour utiliser la commande Proxy ci-dessus dans cet exemple, vous devez exécuter les opérations suivantes:Vous pouvez également tout aussi facilement copier un fichier du serveur C en inversant l’ordre du fichier et de la destination. Ainsi, par exemple, si
baz.txt
était déjà sur le serveur0.0.1.2
situé à,/home/bar/
vous pouvez le copier sur votre machine en utilisant:J'espère que cela aidera les personnes qui ont besoin de précisions un peu plus que les autres.
la source