Comment démarrer automatiquement une connection SSH sortante sur un server lorsqu'un client interne se connecte à ce server

Question

Comment démarrer automatiquement une connection SSH sortante sur un server lorsqu'un client interne se connecte à ce server sur un port spécifique pour un service donné? (pas seulement sshd sur le server, et seulement si la connection ssh sortante n'a pas déjà été démarrée).


Résumé de la solution prévue

Le client envoie un package au server —> le server voit qu'il provient d'une plage IP donnée -> le server vérifie si la connection ssh sortante est déjà en cours d'exécution -> le server trouve qu'il n'est pas en cours d'exécution et génère une connection -> stream de packages client jusqu'à une fin distante via une connection ssh sortante


Autres considérations

Le ForceCommand de sshd fonctionnerait presque parfaitement pour cela, sauf que la question est de requestr une solution pour démarrer une connection ssh sortante, si elle n'existe pas déjà, lorsqu'un client se connecte à un service sur le server. (Presque parfait car même si la solution ForceCommand pourrait commencer une connection, pour cette question particulière, elle n'a pas le moyen de vérifier une connection déjà existante, et ne pas exécuter la command si une connection existe déjà. question request une connection ssh sortante pour démarrer lorsqu'un client se connecte à un service, et pas seulement sshd).


Recherche

La search sur le sujet suggère qu'un script sera nécessaire pour connecter les connections jamais jamais vues via iptables en utilisant -m state ! --state seen_reply -m state ! --state seen_reply , puis vérifiez le journal en arrière-plan, et si une correspondance est trouvée, vérifiez si la connection ssh sortante n'est pas déjà terminée, et sinon, commencez.

Mes searchs ont jusqu'à présent trouvé un exemple de script qui nécessite un travail

 #######auto_ssh-script.sh ####### iptables rule logging all new incoming, unestablished, never before seen connections iptables -I INPUT -p tcp --sport 22 -m state --state NEW -m state ! --state ESTABLISHED -m state ! --state SEEN_REPLY -j LOG --log-prefix CONNECT #######background script --> read log and look for a match to ssortingng CONNECT cat /proc/kmsg | while read LOGGING do LOG='echo "$LOGGING" | grep 'CONNECT' ' if ["$LOG" = ' ' ] & UP= 'echo alxw | grep ssh ' if [ "UP" = ' '] then fi ssh -p 22 <user>@<somewhere-out-there>.com echo "Connected" done 

Mise à jour – netcat pourrait également vous aider.

De stackoverflow.com

 #!/bin/bash netcat -lk -p 12345 | while read line do match=$(echo $line | grep -c 'Keep-Alive') if [ $match -eq 1 ]; then echo "Here run whatever you want..." fi done 

Aussi trouvé un autre extrait utile de stackoverflow.com aussi –

 #!/bin/bash ssh-auth() { # Start the SSH agent only if not running [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh # Identify the running SSH agent [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null # Authenticate (change key path or make a symlink if needed) [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa")]] && ssh-add } 

Encore plus de stackoverflow.com

 #!/bin/bash REMOTEUSER=username REMOTEHOST=remotehost SSH_REMOTEPORT=22 SSH_LOCALPORT=10022 TUNNEL_REMOTEPORT=8080 TUNNEL_LOCALPORT=8080 createTunnel() { /usr/bin/ssh -f -N -L$SSH_LOCALPORT:$REMOTEHOST:SSH_REMOTEPORT -L$TUNNEL_LOCALPORT:$REMOTEHOST:TUNNEL_REMOTEPORT $REMOTEUSER@$REMOTEHOST if [[ $? -eq 0 ]]; then echo Tunnel to $REMOTEHOST created successfully else echo An error occurred creating a tunnel to $REMOTEHOST RC was $? fi } ## Run the 'ls' command remotely. If it returns non-zero, then create a new connection /usr/bin/ssh -p $SSH_LOCALPORT $REMOTEUSER@localhost ls >/dev/null 2>&1 if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnel fi 

Recherche supplémentaire

Il y a aussi de superuser.com –

https://superuser.com/questions/718978/automatic-ssh-tunnel

Commentaire: C'est un moyen unique de résoudre presque ce même problème. Incertain de la validité de la solution.