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