Je suis en train de lancer 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 transfère.
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 j'ai 4 ports à transférer.
Ma solution consiste à ouvrir 4 shells et à consulter constamment mon historique pour rechercher les ports à transférer, etc., puis à exécuter cette commande - une dans chaque shell (saisie de mots de passe, etc.).
Si seulement je pouvais faire quelque chose comme:
Sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 root@IP
alors cela aiderait déjà vraiment.
Y a-t-il un moyen de faciliter cela?
Utilisez le -L
à nouveau dans la même commande. Chaque fois avec des ports différents.
Exactement ce que NaN a répondu, vous spécifiez plusieurs arguments en -L. Je fais ça tout le temps. Voici un exemple de transfert multi-ports:
ssh remote-Host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22
Remarque : Identique à -L localhost:8822:REMOTE_IP_1:22
si vous ne spécifiez pas localhost
.
Maintenant, avec cela, 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 de le résumer dans un script ou de l’automatiser si vous avez plusieurs hôtes/ports à transférer et certains 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 fermés par ctrl+c
parce qu'il fonctionne en arrière-plan. Je donne ma solution ci-dessous en résolvant les deux défauts:
Définition d'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
}
Exemple d'utilisation 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 hostname:6000~6009
Pour les personnes qui transfèrent plusieurs ports via le même hôte , vous pouvez configurer quelque chose comme ceci dans leur ~/.ssh/config
Host all-port-forwards Hostname 10.122.0.3 User username LocalForward PORT_1 IP:PORT_1 LocalForward PORT_2 IP:PORT_2 LocalForward PORT_3 IP:PORT_3 LocalForward PORT_4 IP:PORT_4
et cela devient un simple ssh all-port-forwards
un moyen.
L'un des avantages de la connexion à un serveur avec transfert de port est de faciliter l'utilisation de Jupyter Notebook. Ce lien fournit une excellente description de la procédure. Ici, je voudrais faire un résumé et un élargissement pour que vous puissiez tous vous y référer.
Situation 1. Connectez-vous à partir d’une machine locale nommée Host-A (votre propre ordinateur portable, par exemple) à une machine distante nommée Host-B.
ssh user@Host-B -L port_A:localhost:port_B
jupyter notebook --NotebookApp.token='' --no-browser --port=port_B
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte-B, mais voyez-le dans l’hôte-A.
Situation 2. Connectez-vous à partir d’une machine locale nommée Host-A (par exemple, votre propre ordinateur portable) à une machine de connexion distante nommée Host-B, puis connectez-vous à la machine de travail distante nommée Host-C. C’est généralement le cas de la plupart des serveurs d’analyse au sein des universités et peut être obtenu en utilisant deux ssh -L
connecté avec -t
.
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C
jupyter notebook --NotebookApp.token='' --no-browser --port=port_C
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte C, mais consultez-le dans l’hôte A.
Situation 3. Connectez-vous à partir d'une machine locale nommée Host-A (par exemple, votre propre ordinateur portable) à une machine de connexion distante nommée Host-B, puis connectez-vous à la machine de travail distante nommée Host-C, puis connectez-vous à la machine de travail distante Host- RÉ. Ce n'est généralement pas le cas mais peut arriver de temps en temps. C'est une extension de la situation 2 et la même logique peut être appliquée sur plusieurs machines.
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C -t ssh -L port_C:localhost:port_D user@Host-D
jupyter notebook --NotebookApp.token='' --no-browser --port=port_D
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte D, mais voyez-le dans l’hôte A.
Notez que port_A, port_B, port_C, port_D peuvent être des nombres aléatoires, à l'exception des numéros de port courants répertoriés ici . Dans la situation 1, port_A et port_B peuvent être identiques pour simplifier la procédure.
L'un des avantages de la connexion à un serveur avec transfert de port est de faciliter l'utilisation de Jupyter Notebook. Ce lien fournit une excellente description de la procédure. Ici, je voudrais faire un résumé et un élargissement pour que vous puissiez tous vous y référer.
Situation 1. Connectez-vous à partir d’une machine locale nommée Host-A (votre propre ordinateur portable, par exemple) à une machine distante nommée Host-B.
ssh user@Host-B -L port_A:localhost:port_B
jupyter notebook --NotebookApp.token='' --no-browser --port=port_B
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte-B, mais voyez-le dans l’hôte-A.
Situation 2. Connectez-vous à partir d’une machine locale nommée Host-A (par exemple, votre propre ordinateur portable) à une machine de connexion distante nommée Host-B, puis connectez-vous à la machine de travail distante nommée Host-C. C’est généralement le cas de la plupart des serveurs d’analyse au sein des universités et peut être obtenu en utilisant deux ssh -L
connecté avec -t
.
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C
jupyter notebook --NotebookApp.token='' --no-browser --port=port_C
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte C, mais consultez-le dans l’hôte A.
Situation 3. Connectez-vous à partir d'une machine locale nommée Host-A (par exemple, votre propre ordinateur portable) à une machine de connexion distante nommée Host-B, puis connectez-vous à la machine de travail distante nommée Host-C, puis connectez-vous à la machine de travail distante Host- RÉ. Ce n'est généralement pas le cas mais peut arriver de temps en temps. C'est une extension de la situation 2 et la même logique peut être appliquée sur plusieurs machines.
ssh -L port_A:localhost:port_B user@Host-B -t ssh -L port_B:localhost:port_C user@Host-C -t ssh -L port_C:localhost:port_D user@Host-D
jupyter notebook --NotebookApp.token='' --no-browser --port=port_D
Ensuite, vous pouvez ouvrir un navigateur et entrer: http: // localhost: port_A / pour effectuer votre travail sur l’hôte D, mais voyez-le dans l’hôte A.
Notez que port_A, port_B, port_C, port_D peuvent être des nombres aléatoires, à l'exception des numéros de port courants répertoriés ici . Dans la situation 1, port_A et port_B peuvent être identiques pour simplifier la procédure.
J'ai développé loco pour obtenir de l'aide pour le transfert SSH. Il peut être utilisé pour partager les ports 5000 et 7000 sur des ports distants localement situés sur les mêmes ports:
pip install loco
loco listen SSHINFO -r 5000 -r 7000