Reverse ssh : Accéder à un serveur derrière un NAT - Firewall : Différence entre versions
De wikiGite
(→Service au démarrage de A) |
(→Reverse ssh) |
||
Ligne 13 : | Ligne 13 : | ||
== Reverse ssh == | == Reverse ssh == | ||
+ | Le port 22222 de l'exemple suivant doit se trouver entre 1024 et 65535. Il faut evidement tenir une liste des ports accociés aux machines. | ||
+ | |||
Créez le tunnel sur le serveur A : | Créez le tunnel sur le serveur A : | ||
<source lang="bash">ssh -NR 22222:localhost:22 userssh@serveurB</source> | <source lang="bash">ssh -NR 22222:localhost:22 userssh@serveurB</source> | ||
Ligne 18 : | Ligne 20 : | ||
Se connecter au tunnel depuis le serveur B | Se connecter au tunnel depuis le serveur B | ||
<source lang="bash">ssh -p 22222 rootA@127.0.0.1</source> | <source lang="bash">ssh -p 22222 rootA@127.0.0.1</source> | ||
− | |||
== Service au démarrage de A == | == Service au démarrage de A == |
Version du 25 avril 2012 à 13:51
Sommaire
Fonctionnement
Le serveur A se trouvant derriere le par-feu créé un tunnel vers le serveur B. Depuis B on se connecte au serveur A au travers du tunnel ssh.
Prérequis
Ajouter cette ligne dans /etc/ssh/sshd_config :
AllowTcpForwarding yes
Par sécurité créer un utilisateur dédié au tunnel sur B :
adduser userssh
Reverse ssh
Le port 22222 de l'exemple suivant doit se trouver entre 1024 et 65535. Il faut evidement tenir une liste des ports accociés aux machines.
Créez le tunnel sur le serveur A :
ssh -NR 22222:localhost:22 userssh@serveurB
Se connecter au tunnel depuis le serveur B
ssh -p 22222 rootA@127.0.0.1
Service au démarrage de A
aptitude install autossh
Générer une paire de clef avec root
ssh-keygen -t dsa
Faire un echange de clef avec le serveur B:
ssh-copy-id -i /root/.ssh/id_dsa.pub userssh@serveurB
ajouter dans /etc/rc.local :
autossh -i /root/.ssh/id_dsa -NR 22222:localhost:22 userssh@serveurB &
Créer un script dans /etc/init.d/autosshd
#! /bin/bash
### BEGIN INIT INFO
# Provides: autosshd
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the autossh daemon
# Description: starts autossh
### END INIT INFO
DAEMON_OPTS="-i /root/.ssh/id_dsa -NR 22222:localhost:22 userssh@serveurB &"
NAME=autossh
DESC="Autossh daemon"
PID=/tmp/autossh.pid
case "$1" in
start)
CD_TO_APP_DIR="cd /home/gitlab/gitlab"
START_DAEMON_PROCESS="/var/lib/gems/1.9.1/bin/bundle exec unicorn_rails $DAEMON_OPTS"
START_RESQUE_PROCESS="./resque.sh"
echo -n "Starting $DESC: "
if [ `whoami` = root ]; then
sudo -u gitlab sh -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS"
else
$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS
fi
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
kill -QUIT `cat $PID`
kill -QUIT `cat $RESQUE_PID`
echo "$NAME."
;;
restart)
echo -n "Restarting $DESC: "
kill -USR2 `cat $PID`
kill -USR2 `cat $RESQUE_PID`
echo "$NAME."
;;
reload)
echo -n "Reloading $DESC configuration: "
kill -HUP `cat $PID`
kill -HUP `cat $RESQUE_PID`
echo "$NAME."
;;
*)
echo "Usage: $NAME {start|stop|restart|reload}" >&2
exit 1
;;
esac
exit 0
Autoriser l'execution du script :
chmod +x /etc/init.d/autosshd
Ajouter le script au démarage :
update-rc.d autosshd defaults
Se connecter à d'autres port
On souhaite par exemple se connecter à un serveur web se trouvant sur A.
Sur A :
ssh -NR 22280:localhost:80 userssh@serveurB
Sur B :
firefox "http://127.0.0.1:22280"