Boucle des options dans une commande

Bonsoir,

Je tente ma chance dans le coin programmation.
Sur l’un des réseaux que j’administre, vnc est installé partout et j’y accède via un tunnel ssh.
Le problème est que je n’accède qu’à un seul ordi à la fois, et j’aimerais bénéficier d’un tunnel pour chaque ordi d’un coup.

Pour mieux comprendre, la commande actuelle nettoyée du superflu est du type :

Donc en faisant un :

et en lançant un client vnc en localhost sur le port 5980, je peux administrer en graphique la machine 192.168.153.6, mais je dois relancer le tunnel ssh pour une autre.

Ma première question est donc : est-il possible, pour une liste d’ip du réseau distant du type 192.168.1.NOMBRE, de rediriger dans le tunnel les ports 5900 de ces machines vers des ports 10000 + NOMBRE de ma machine locale ? Par exemple à l’aide d’une boucle ?

Merci d’avance :wink:

Avant de répondre spécifiquement à ta question, il faut quand même savoir que les solutions de type VPN sont plus adaptées que le port forwarding pour faire ce que tu veux. Si tu ne veux/peux pas installer OpenVPN sur ton serveur, tu peux toujours faire du VPN sur SSH (plus exactement, un tunnel IP qui fonctionne comme un VPN). Dans les deux cas ça te permettrait d’accéder à l’ensemble du réseau sans avoir à faire de port forwarding individuellement.

Concernant ta demande : rien n’empêche de mettre plusieurs fois l’option -L sur une même ligne de commandes. Il suffit donc de construire la liste d’arguments en la mettant dans une variable, puis d’utiliser cette variable pour lancer SSH :

FORWARDING_ARGS="-L local1:ip1:port1 -L local2:ip2:port2 ..." ssh user@ip:port ${FORWARDING_ARGS}
Par exemple en bash (pour faciliter les calculs arithmétiques et les regex ; en dash/sh ça serait un peu plus chiant à faire) :

[code]#!/bin/bash

variables à personnaliser

LISTE_IP="ip1 ip2 ip3"
PORT_LOCAL_BASE="10000"
PORT_DISTANT="5900"
CONNEXION_ARGS=“user@ip:port -i ~/.ssh/identité -N …”

fin des variables

construire la liste de port-forwardings

FORWARDING_ARGS=""
for IP in ${LISTE_IP}; do

extraire le dernier composant de l’ip

if [[ “${IP}” =~ .([0-9]+)$ ]]; then
# calculer le port local
let PORT_LOCAL="${PORT_LOCAL_BASE} + ${BASH_REMATCH[1]}"
# ajouter le port-forwarding à la liste
FORWARDING_ARGS="${FORWARDING_ARGS} -L ${PORT_LOCAL}:${IP}:${PORT_DISTANT}"
fi
done

lancer ssh

ssh ${CONNEXION_ARGS} ${FORWARDING_ARGS}[/code]

Merci pour la réponse :wink:

Je ne savais pas Openvpn est aussi installé, mais j’ai toujours eu ma préférence vers ssh.
C’est l’occasion pour moi de se pencher un peu plus sur vpn.

[quote=“iruau”]

[code]#!/bin/bash

variables à personnaliser

LISTE_IP=“ip1 ip2 ip3”
PORT_LOCAL_BASE=“10000”
PORT_DISTANT=“5900”
CONNEXION_ARGS=“user@ip:port -i ~/.ssh/identité -N …”

fin des variables

construire la liste de port-forwardings

FORWARDING_ARGS=""
for IP in ${LISTE_IP}; do

extraire le dernier composant de l’ip

if [[ “${IP}” =~ .([0-9]+)$ ]]; then
# calculer le port local
let PORT_LOCAL="${PORT_LOCAL_BASE} + ${BASH_REMATCH[1]}"
# ajouter le port-forwarding à la liste
FORWARDING_ARGS="${FORWARDING_ARGS} -L ${PORT_LOCAL}:${IP}:${PORT_DISTANT}"
fi
done

lancer ssh

ssh ${CONNEXION_ARGS} ${FORWARDING_ARGS}[/code][/quote]

Je vais pouvoir regarder aussi de ce côté ce week-end, nickel :023