scp sur ssh tunnel

1

Je souhaite copier des fichiers d'un ordinateur distant (W) vers un ordinateur hôte privé (P) via scp. Comme je ne peux pas me connecter directement à la machine W, j’utilise un tunnel SSH sur deux machines différentes avec le port 22. Ce que je voudrais faire est de me connecter à la machine W et à partir de là faire un transfert de fichier scp vers la machine P, le problème est que P est caché dans un réseau, donc je ne peux pas spécifier une adresse IP hôte distante lorsque je suis connecté à la machine W. Existe-t-il une solution pour cela ?? J'arrive à le faire quand je suis connecté à la machine P, mais je ne veux pas se rappeler le chemin du fichier chaque fois que je copie un fichier.

jruebsam
la source
Donc, votre configuration ressemble à quelque chose comme ça? W -- ? -- ? -- P
Janos Pasztor
oui exactement, il y a 2 machines entre ces ordinateurs sur lesquelles je fais un transfert de port, le problème est que W est caché derrière une sorte de routeur .. de mon dortoir
jruebsam
Avez-vous un accès shell au routeur / hôte devant P? Ou pouvez-vous effectuer une redirection de port sur l’un de ceux marqués par ??
Janos Pasztor
Je n'ai aucun accès au routeur, j'ai accès aux deux machines du milieu (permet de les appeler M1 et M2), mais pas en tant que root, et je peux également effectuer un portforward vers M2 par exemple.
jruebsam
Attendez une seconde, votre configuration réseau ressemble-t-elle réellement à ceci? W -- M1 -- R1 -- M2 -- P ? Ou quel est exactement le chemin de réseau entre W et P?
Janos Pasztor

Réponses:

1

Après avoir clarifié votre configuration comme indiqué ci-dessus, votre système ressemble à ceci:

P -- R -- M1 -- M2 -- W

R est un routeur NAT qui n'autorise que les connexions depuis P à M1, mais pas l’inverse et tous les nœuds doivent être utilisés pour établir une connexion.

Solution 1

Votre seul vrai problème est le routeur R vous n’avez aucun contrôle, vous devez donc en quelque sorte établir un tunnel pour permettre W se reconnecter. La solution la plus simple serait d'avoir P établir une connexion SSH pour M1 et établir un port inversé là-bas.

Vous pouvez ensuite configurer un second tunnel SSH à partir de W à M2 transférer les paquets locaux vers le port transféré sur le port inverse sur M1, qui peut à son tour être utilisé pour établir une connexion SSH en tunnel entre W à P.

Solution 2

Maintenant, cela ajoute une certaine complexité à l’ensemble de la configuration, ce qui la rend assez sujette aux erreurs. Une meilleure solution consisterait à établir une connexion VPN entre W et M1, P et M2 et entre M1 et M2. Ensuite, vous pouvez établir un routage en utilisant une plage d'adresses privée allant de W à P sur ces trois tunnels. Pour que cela fonctionne, vous devez avoir un accès root à la fois. M1 et M2 ET vous devez configurer des pare-feu appropriés afin que personne de l'extérieur n'entre dans votre VPN.

Il existe bien sûr d’autres solutions également, mais la solution réelle peut ensuite être adaptée à vos outils.

Janos Pasztor
la source
Merci pour votre réponse, j'ai réussi à faire fonctionner la solution 1, la solution 2 est abandonnée car je n'ai pas d'accès root. Je peux maintenant me connecter depuis W à P avec ssh -l userame -p 2210 localhost. Il me reste une question à poser: comment puis-je utiliser scp, c.-à-d. Passer le nom d'utilisateur du port, etc., je n'ai pas réussi à le faire fonctionner? J'ai essayé quelque chose comme scp parameter.ini -p 2210 username@localhost:~/parameter2.ini après trois tentatives de mot de passe, je reçois le message suivant Permission denied (publickey,keyboard-interactive). lost connection
jruebsam
1
@jruebsam: scp utilise une capitale P pour le port, donc scp -P 2210 file user@localhost:~/destfile. Je ne sais vraiment pas pourquoi ssh et scp sont incohérents là-bas - probablement pour des raisons historiques, comme toujours lorsque vous ne pouvez pas expliquer quelque chose avec des arguments ;)
mpy
@mpy: Cela me donne un nouveau message d'erreur ssh: connect to host localhost port 2210: Connection refused lost connection
jruebsam
@mpy: Ok, je ne sais pas où l'erreur a été commise mais cela semble fonctionner maintenant avec la commande comme ci-dessus
jruebsam
2

Je recommanderais de monter le système de fichiers distant localement en utilisant sshfs. Je ne connais pas les détails de votre configuration, mais je vais vous donner un exemple. J'ai configuré un tunnel via un serveur distant (R1) vers un second serveur inaccessible (R2) sur le réseau de R1 avec cette commande:

ssh -fN -p 24222 user@R1 -L 2222:R2:22

Je peux maintenant me connecter à R2 comme suit:

ssh -p 2222 127.0.0.1

Je peux aussi utiliser sshfs monter localement un répertoire à partir de R2:

sshfs -p 2222 127.0.0.1:/path/to/dir /mnt/mountpoint

J'ai essayé ceci en utilisant un tunnel à travers un pas deux serveurs distants mais je ne vois pas pourquoi il ne devrait pas fonctionner avec 3 ou plus tant que le tunnel a été correctement configuré.

Ce n'est pas exactement ce que vous avez demandé, mais cela devrait servir de solution de contournement. Une fois le système de fichiers distant monté localement, vous pouvez utiliser des fonctions simples. cp copier des fichiers de / vers.

terdon
la source
En fait, j’avais déjà utilisé cette méthode auparavant, le problème est que la connexion est un peu instable et il arrive souvent que mon terminal et le navigateur de fichiers se figent.
jruebsam
1
@jruebsam Vous devriez pouvoir éviter de tels problèmes si vous montez le partage sshfs à l'aide de autofs (voir ici ) avec le soft option.
terdon
Merci pour votre réponse, je pense que je pourrais donner un essai à autofs, j'espère que cela fonctionne vraiment mieux qu'avec sshfs.
jruebsam
sshfs n'a rien à voir avec ça ... scp fonctionne très bien une fois que vous configurez le tunnel avec ssh -fN
slf
@sfi bien sûr, c'est simplement un moyen plus pratique de faire ce genre de chose si vous allez le faire souvent.
terdon