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.

  • SSH ne fonctionne pas sur le server
  • Comment ssh permet-il de configurer le renvoi de port distant mais pas les commands d'exécution?
  • Où est sshd dans OpenSuse 13.2?
  • Comment puis-je permettre à un user de subversion linux d'exécuter uniquement svnserve?
  • 19 000 tentatives de mot de passe root échouées dans auth.log en 2 jours?
  • Définissez la key ssh et ne peut pas vous connecter
  • Autoriser les requêtes http une fois qu'un user ssh'es dans
  • J'ai oublié le mot de passe de l'user et j'ai désactivé le ssh ssh signin Ubuntu 14.04 server
  • en utilisant ssh pourquoi les directorys sftp doivent-ils être lisibles dans le monde entier?
  • La connection SSH échoue pour les instances EC2 créées à partir de l'image de travail EC2
  • Existe-t-il des problèmes d'incompatibilité lors de l'exécution de cygwin sshd sur un contrôleur de domaine Windows 2003?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.