ssh -L transférer plusieurs ports

Je cours actuellement un tas de:

sudo ssh -L PORT:IP:PORT root@IP 

où IP est la cible d’une machine sécurisée et PORT représente les ports que je transmets.

C’est parce que j’utilise beaucoup d’applications auxquelles je ne peux pas accéder sans ce transfert. Après cela, je peux accéder via localhost:PORT .

Le problème principal est apparu maintenant que je possède 4 de ces ports que je dois transférer.

Ma solution consiste à ouvrir 4 shells et à rechercher en permanence mon historique en arrière pour rechercher exactement quels ports doivent être transférés, etc., puis exécuter cette commande – une dans chaque shell (mot de passe à remplir, etc.).

Si seulement je pouvais faire quelque chose comme:

 sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP 

alors ça aiderait déjà vraiment.

Est-il possible de le faire plus facilement?

Utilisez à nouveau l’option -L dans la même commande. Chaque fois avec des ports différents.

Exactement ce à quoi NaN a répondu, vous spécifiez plusieurs arguments -L. Je fais ça tout le temps. Voici un exemple de transfert de plusieurs ports:

 ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22 

Remarque : Ceci est identique à -L localhost:8822:REMOTE_IP_1:22 si vous ne spécifiez pas localhost .

Maintenant, avec ceci, vous pouvez maintenant (depuis un autre terminal) faire:

 ssh localhost -p 8822 

se connecter à REMOTE_IP_1 sur le port 22

et pareillement

 ssh localhost -p 9922 

se connecter à REMOTE_IP_2 sur le port 22

Bien sûr, rien ne vous empêche d’envelopper ce script dans un script ou de l’automatiser si vous avez plusieurs hôtes / ports à transférer et à certains ports spécifiques.

J’espère que cela t’aides.

Vous pouvez utiliser la fonction bash suivante (ajoutez-la simplement à votre ~/.bashrc ):

 function pfwd { for i in ${@:2} do echo Forwarding port $i ssh -N -L $i:localhost:$i $1 & done } 

Exemple d’utilisation:

 pfwd hostname {6000..6009} 

jbchichoko et yuval ont donné des solutions viables. Mais la réponse de jbchichoko n’est pas une réponse flexible en tant que fonction, et les tunnels ouverts par la réponse de yuval ne peuvent pas être arrêtés par ctrl+c car il s’exécute en arrière-plan. Je donne ma solution ci-dessous en résolvant les deux défauts:

Définir une fonction dans ~/.bashrc ou ~/.zshrc :

 # fsshmap multiple ports function fsshmap() { echo -n "-L 1$1:127.0.0.1:$1 " > $HOME/sh/sshports.txt for ((i=($1+1);i<$2;i++)) do echo -n "-L 1$i:127.0.0.1:$i " >> $HOME/sh/sshports.txt done line=$(head -n 1 $HOME/sh/sshports.txt) cline="ssh "$3" "$line echo $cline eval $cline } 

Un exemple d’exécution de la fonction:

 fsshmap 6000 6010 hostname 

Résultat de cet exemple:

Vous pouvez accéder à 127.0.0.1:16000~16009 le même que le hostname:6000~6009 d’ hostname:6000~6009