Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Howto] Tunnels et utilisation avancée de ssh
View unanswered posts
View posts from last 24 hours

Goto page 1, 2, 3  Next  
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Tue Jan 18, 2005 6:29 pm    Post subject: [Howto] Tunnels et utilisation avancée de ssh Reply with quote

"Là où ssh passe, tout passe": telle est la devise que nous allons démontrer dans ce Howto
  • Configuration de ssh
    Je rapelle que le fichier de configuration de ssh est dans ~/.ssh/config
    Le format y est documenté dans "man ssh_config"
    typiquement ça ressemble à ça:
    Code:
    ForwardAgent=yes

    Host=raccourci
    Hostname=machine.domaine.com
    User=nom_utilisateur
    Compression=yes

    Host=hote2
    Hostname=ordi.projet.org
    User=dugland
    Compression=no

    Host=*
    Compression=yes

    ainsi si vous tapez "ssh raccourci" cela revient à faire
    Code:
    ssh -A -C nom_utilisateur@machine.domaine.com

    ce qui est un gain de temps appréciable (-A est l'option qui correspond à ForwardAgent=yes et -C à Compression=yes)
    pour ce qui est de l'ordre des paramètres:
    man ssh_config wrote:
    ssh obtains configuration data from the following sources in the following order:
    1. command-line options
    2. user's configuration file ($HOME/.ssh/config)
    3. system-wide configuration file (/etc/ssh/ssh_config)

    For each parameter, the first obtained value will be used. The configuration files contain sections bracketed by ``Host'' specifications, and that sec-
    tion is only applied for hosts that match one of the patterns given in the specification. The matched host name is the one given on the command line.

    Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general
    defaults at the end.

    Par exemple si le fichier de conf est:
    Code:
    Compression=yes

    Host=hote2
    Hostname=ordi.projet.org
    User=dugland
    Compression=no

    Alors, ssh hote2 va activer la compression.
    Ainsi spécifier des paramètres au début du fichier c'est spécifier pour toutes les connexions. Si on veux que le paramètre puisse être changé dans la configuration spécifique à un hote, il faut faire:
    Code:
    Host=hote2
    Hostname=ordi.projet.org
    User=dugland
    Compression=no

    Host=*
    Compression=yes

    alors, ssh hote2 n'aura pas la compression, contrairement à tous les autres ssh bidule@machin que l'on executera


  • Connexion sans mot de passe
    Pour ce faire on doit créer une clef publique.
    • Manière simple
      création de la clef:
      Code:
      ssh-keygen -t rsa -b 1024
      pour créer une clef rsa de 1024 bits
      Mettez une passphrase vide et laissez le fichier à son endroit par défaut.
      Ensuite
      Code:
      scp ~/.ssh/id_rsa.pub hote:
      ssh hote
      # sur l'hôte distant:
      cat id_rsa.pub >> ~/.ssh/authorized_keys
      # on peux enlever id_rsa.pub sur l'hote distant:
      rm id_rsa.pub

      maintenant "ssh hote" ne devrait plus vous demander de mot de passe
    • Manière un peu plus sécu
      lire ceci: Guide de Keychain pour Gentoo Linux
    • Le principe du "Forward Agent"
      en réalité quand vous faites "ssh hote" avec le mécanisme de clef, l'authentification se fait grace à la clef privée chez vous: ~/.ssh/id_rsa (à garder précieusement, toute personne qui s'en empare peux se logguer là où vous avez mis vos clef publique si vous avez suivi la méthode simple)
      maintenant admettons que vous soyez derrière l'écran de la machine A, sur laquelle vous êtes admin, et que vous souhaitez vous logger sur B sans mot de passe: pas de problème, vous faitez comme décrit ci dessus.
      Si maintenant de B vous souhaitez vous logguer sur C, il vous faut faire pareil, mais si vous n'avez pas confiance en l'admin de B alors ça pose problème: en effet l'admin de B pourrait récupérer la clef privée qui est dans votre home sur B et s'en servir pour se logguer sur C.
      Il ne faut donc pas mettre de clef privée sur B.

      Pour ce faire vous mettez ForwardAgent=yes dans les fichiers de config des 3 machines A, B et C (pêut être pas nécessaire sur les 3 mais bon ...) et vous copiez votre clef publique sur B et C (pas la peine de créer de clef privée sur B ...). Alors, une fois loggé sur B, le "ssh C" ne demande pas de mot de passe car grace au forward agent, ssh sait authentifier grace à la clef publique de A.

  • Tunnels à travers ssh
    Les tunnels via ssh ne sont que des tunnels TCP. si vous souhaitez faire des tunnels pour UDP (le tunnel étant toujours en TCP) alors vous pourrez regarder zebedee (dans portage).

    • Le LocalForward par l'exemple
      Si votre ~/.ssh/config contient ceci:
      Code:
      Host=A
      Hostname=machine.internet.pipo
      User=blah
      LocalForward=1234 serveurweb.internet.pipo:80

      Alors lors de "ssh A" un tunnel est crée:
      prenez votre navigateur web favori et allez sur http://localhost:1234
      à ce moment là les paquets que vous envoyez sur localhost:1234 passent à travers ssh et arrivent jusqu'a machine.internet.pipo. Une fois là bas ils sont envoyés à serveurweb.internet.pipo sur le port 80 de manière normale (comprendre, sans ssh et de manière non cryptée ...). Les paquets en retour suivent le chemin inverse et la page web de serveurweb.internet.pipo s'affiche dans votre navigateur.
    • Le RemoteForward
      il sert à faire passer les connexions dans l'autre sens: avec le localforward vous mettez en place un tunnel où vous initiez les connexions vers la machine distante, avec un certain port. Avec le Remote Forward, c'est la machine distante qui peux initier les connexions vers un certain port de votre ordinateur. (cf la doc ...)
    • Le DynamicForward par l'exemple
      Il permet de créer un proxy socks sur le port spécifié.
      Par exemple
      Code:
      Host=A
      Hostname=machine.internet.pipo
      User=blah
      DynamicForward=1234

      ensuite vous pouvez configurer votre programme pour utiliser le proxy socks crée par ssh sur votre machine. si votre programme ne supporte pas les proxy socks, utilisez tsocks ou dante.
      exemple de configuration avec tsocks (paquet tsocks dans portage):
      fichier /etc/socks/tsocks.conf:
      Code:
      server = 127.0.0.1
      server_port = 1234
      server_type = 5

      ensuite le fait de lancer "tsocks navigateur_web_favori" vous permettra d'accéder à la page web de serveurweb.internet.pipo en tapant http://adresse_ip_serveurweb_internet_pipo dans la barre d'addresses.
      Petite remarque: si vous voulez utiliser un client ftp il vaux mieux le configurer en mode passif; en effet je n'ai pas l'impression que le proxy socks crée par ssh supporte l'utilisation du mode actif. je ne suis arrivé pour l'instant qu'a faire marcher ncftp lançé avec tsocks. lftp compilé avec USE=socks5 ne marchait pas pour moi ...

  • Tunnels avec ssh en plusieurs sauts

    • Méthode grace à ce que l'on a vu
      vous êtes sur la machine A, vous êtes derrière un firewall qui ne vous permet que de vous connecter à B en ssh. Par contre une fois loggé sur B vous pouvez vous connecter en ssh sur les machines d'internet. Vous souhaitez récupérer grace à scp des fichiers qui sont sur une machine C sur internet.

      Avant vous vous loggiez sur B vous récupériez vos fichiers de C vers B puis de B vers A. seulement l'admin de B n'est pas content car vous mettez vraiment de gros fichiers sur B, et en plus ce ne sont pas des fichiers pour votre travail.
      Vous souhaiteriez pouvoir vous connetcer directement à C par un tunnel pour que l'admin de B n'y voie que du feu.

      Vous mettez donc en place un LocalForward:
      Code:
      Host=B
      Hostname=serveurssh.reseau_interne.fr
      User=dupont
      LocalForward=1234 machine_C.domaine.com:22

      Host=CviaB
      Hostname=localhost
      Port=1234
      User=moi

      là vous prenez une console et vous faites "ssh B"
      vous prenez une autre console et vous faites "ssh CviaB" et hop vous êtes directement sur C! maintenant vous pouvez faire "scp CviaB:video_interessante.avi ." en tranquilité.
    • Encore mieux grâce à la ProxyCommand
      oui vous arrivez à vous connecter sur C directement, mais vous avez fait pareil sur une machine D et ssh râle à chaque fois car les clef des hôtes changent.
      En plus ce salaud d'admin sur B a compris votre manège et a mis un "AllowTcpForwarding=no" dans le fichier de conf du serveur ssh sur B.

      De toute façon ça vous emmerdait d'avoir deux clients ssh à lancer dans deux consoles différentes ...

      On va utiliser le paramètre ProxyCommand.
      Par exemple:
      Code:
      Host=B
      Hostname=serveurssh.reseau_interne.fr
      User=dupont

      Host=CviaB
      User=user_sur_C
      ProxyCommand=ssh B nc -q 0 machine_C.domaine.com 22

      grace à la proxy command, ssh va se rediriger dans l'entrée standard de cette commande et va récupérer les paquets en retour dans la sortie standard de cette commande. ainsi un "ssh CviaB" tout seul va vous connecter sur C.
      l'option -q 0 de netcat est pour signaler à netcat de se terminer lorsque l'on se déloggue de C, en effet dans le cas contraire il va rester des processus fous.
      Ceci requiere que netcat soir installé sur B. que faire dans le cas contraire ?
      • soit vous compilez netcat dans votre home sur B
      • soit vous utilisez le netcat présent sur C si il y en a un.
        Le fichier de conf prends alors la forme:
        Code:
        Host=B
        Hostname=serveurssh.reseau_interne.fr
        User=dupont

        Host=CviaB
        User=user_sur_C
        ProxyCommand=ssh B ssh moi@machine_C.domaine.com nc -q 0 127.0.0.1 22

        Pour que ceci marche il faut que le "ssh moi@machine_C.domaine.com" qui est executé sur B ne demande pas de mot de passe. En effet je vous rappelle que ceci est basé sur la redirection des entrées et sorties de la ProxyCommand et vous ne pouvez donc pas tapez votre mot de passe ...


  • Reprendre les téléchargements non finis avec rsync
    Voilà maintenant que vous avez appris à faire tout ça vous pouvez faire passer des données via vos tunnels ssh, et vous connecter à une machine via plusiers sauts.
    Si vous souhaitez copier de gros fichiers entre la machine distante et vous, la solution la plus simple consiste à utiliser scp.
    Mais si une coupure réseau se produit, et que votre téléchargement n'est pas fini, il n'est pas possible de le reprendre directement avec scp.
    remplacez votre commande scp par rsync: rsync prends exactement les mêmes arguments que scp, et utilise ssh en coulisse, mais lui sait reprendre les téléchargements non finis.
    Pour ce type d'utilisation, les options les plus utiles à rajouter de rsync sont --partial et --size-only; pour une meilleur visualisation de l'avancement du téléchargement, les options -v, --progress et --stats.
    plus d'infos dans la documentation de rsync

Ce Howto est sous licence FDL

(merci à Ey pour l'explication de la ProxyCommand et du DynamicForward et à Celeborn pour la correction des fautes)
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse


Last edited by scout on Tue Apr 05, 2005 4:18 pm; edited 11 times in total
Back to top
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Tue Jan 18, 2005 6:35 pm    Post subject: Reply with quote

Alors la !!!! Merci tout plein pour le beau HOWTO !! :D
_________________
$ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join'
Back to top
View user's profile Send private message
Polo
l33t
l33t


Joined: 27 Jan 2004
Posts: 649
Location: Angers, France

PostPosted: Tue Jan 18, 2005 6:37 pm    Post subject: Reply with quote

ouai, bravo!!!
a ajouter dans la liste des howtos, et en bonne place :lol:
Back to top
View user's profile Send private message
Celeborn
Tux's lil' helper
Tux's lil' helper


Joined: 24 Jan 2004
Posts: 132
Location: Heidelberg (Germany)

PostPosted: Tue Jan 18, 2005 6:43 pm    Post subject: Reply with quote

Que dire...... Merci :!:
je crois que ça résume bien la situation !
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4912

PostPosted: Tue Jan 18, 2005 6:56 pm    Post subject: Reply with quote

ah quel beau howto!

retour sur impression :

en voyant le sujet je me suis dit : "Quel bonne idée!"

En voyant le contenu plus qu'interéssant j'ai pensé : "Nan c'est pas possible!"

Après avoir remarqué qu'il était complet : "Incroyaaable!"

Et enfin, après tout ceci il a bien fallu triompher : "Genial!"

merci scout!
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Tue Jan 18, 2005 7:11 pm    Post subject: Reply with quote

kwenspc wrote:
ah quel beau howto!
retour sur impression :
en voyant le sujet je me suis dit : "Quel bonne idée!"
En voyant le contenu plus qu'interéssant j'ai pensé : "Nan c'est pas possible!"
Après avoir remarqué qu'il était complet : "Incroyaaable!"
Et enfin, après tout ceci il a bien fallu triompher : "Genial!"
merci scout!

Ah merci merci :-D
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
babykart
Guru
Guru


Joined: 08 Oct 2004
Posts: 415

PostPosted: Tue Jan 18, 2005 7:16 pm    Post subject: Reply with quote

impek'... :wink:
un grand merci :D
_________________
>> Gentoo-FR <<
-----
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Tue Jan 18, 2005 7:25 pm    Post subject: Reply with quote

Ah c'est bien expliqué !
Tu as prévu d'ajouter X11 forwarding ? Je voulais l'utiliser cet aprem mais ca ne marche pas chez moi... j'attend donc la suite de ton tuto avec impatience ! :wink:
Back to top
View user's profile Send private message
zdra
Veteran
Veteran


Joined: 30 Nov 2003
Posts: 1693
Location: Bruxelles, Belgique

PostPosted: Tue Jan 18, 2005 7:30 pm    Post subject: Reply with quote

Pour tout dire, j'imprime !!! c'est un topic que j'aurais fini par poster sous forme d'une question pendant les vacs :lol:

merci :!:

Quote:
Le format y est documenté dns "man ssh_config"

dns -> dans

Pour le X11forwarding moi ça foire à cause de ça: http://bugs.gentoo.org/show_bug.cgi?id=70585
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Tue Jan 18, 2005 7:52 pm    Post subject: Reply with quote

zdra wrote:
Quote:
Le format y est documenté dns "man ssh_config"

dns -> dans
corrigé
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Tue Jan 18, 2005 7:55 pm    Post subject: Reply with quote

Bien joué !
Je viens de commenter #DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} dans /etc/security/pam_env.conf
Ca à l'air de fonctionner, du moins en local, mais je ne peux pas le tester à distance...
Back to top
View user's profile Send private message
bob1977
Guru
Guru


Joined: 16 Mar 2004
Posts: 387

PostPosted: Tue Jan 18, 2005 10:09 pm    Post subject: Reply with quote

Très bon Howto! Félicitations
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3514
Location: Alsace (France)

PostPosted: Wed Jan 19, 2005 8:03 am    Post subject: Reply with quote

Wow! direction bookmark de suite! Merci!!!
Back to top
View user's profile Send private message
Trevoke
Advocate
Advocate


Joined: 04 Sep 2004
Posts: 4099
Location: NY, NY

PostPosted: Wed Jan 19, 2005 1:35 pm    Post subject: Reply with quote

Pachacamac wrote:
Bien joué !
Je viens de commenter #DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} dans /etc/security/pam_env.conf
Ca à l'air de fonctionner, du moins en local, mais je ne peux pas le tester à distance...

Fais peter le mot de passe root.. :twisted:
_________________
Votre moment detente
What is the nature of conflict?
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Wed Jan 19, 2005 3:29 pm    Post subject: Reply with quote

Nan je le garde !
Je sais que tu es méchant ! :P

Cet aprem je n'arrivai pas à accéder à ma machine depuis la fac, en fait je ne l'avais pas allumé avant de partir :lol:
Back to top
View user's profile Send private message
Trevoke
Advocate
Advocate


Joined: 04 Sep 2004
Posts: 4099
Location: NY, NY

PostPosted: Wed Jan 19, 2005 3:46 pm    Post subject: Reply with quote

http://www.bash.org/?5273

C'est tout ce que j'ai a dire :)
_________________
Votre moment detente
What is the nature of conflict?
Back to top
View user's profile Send private message
Enlight
Advocate
Advocate


Joined: 28 Oct 2004
Posts: 3514
Location: Alsace (France)

PostPosted: Wed Jan 19, 2005 3:46 pm    Post subject: Reply with quote

Ah j'ai eu pareil aujourd'hui... sauf que c'est ma mère qui l'a éteint l'ordi et elle, pour éteindre... elle appuye sur le bouton!!! :evil: :evil: :evil:
Back to top
View user's profile Send private message
yuk159
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1801
Location: noumea ,nouvelle-caledonie

PostPosted: Thu Jan 20, 2005 9:52 pm    Post subject: Reply with quote

Merci scout pour le How-to et pour m'avoir prévenu et désolé du temps de réaction ;)


@+
_________________
The box said: "Requires Windows 98/2000/XP/NT, or better."
So, I installed LINUX!
un blog de plus :)
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Fri Jan 21, 2005 5:04 am    Post subject: Reply with quote

yuk159 wrote:
Merci scout pour le How-to et pour m'avoir prévenu et désolé du temps de réaction ;)

T'as pas à t'excuser, déja que tu te tapes le boulot fastidieux de regrouper les howto, c'est pas moi qui irait critiquer ton temps de réaction ...
Bon sinon je vais bientôt ajouter une section sur le DynamicForward ... un truc encore plus énorme que le LocalForward :-D
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Sat Jan 22, 2005 10:19 pm    Post subject: Reply with quote

Ajout de la section sur le fabuleux DynamicForward et sur l'utilisation de rsync pour la copie efficace de fichiers. Merci à Ey pour ses explications.
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Sat Jan 22, 2005 10:33 pm    Post subject: Reply with quote

Va falloir que j'essaye le DynamicForward à la fac. Le proxy interdit certains sites mais je me demande s'il n'est pas possible d'y accéder comme ça... :roll:
Back to top
View user's profile Send private message
zdra
Veteran
Veteran


Joined: 30 Nov 2003
Posts: 1693
Location: Bruxelles, Belgique

PostPosted: Tue Jan 25, 2005 11:31 pm    Post subject: Reply with quote

Tant qu'on est dans le sujet de SSH:

J'ai une question, je suis maintenant derriere un routeur ADSL, donc c'est le routeur qui a la connection internet et qui la partage sur les autre pc du réseau. Depuis l'extérieur alors comment faire pour se connecter en ssh sur l'un des ordi du réseau ? Si je fais une connection sur le routeur il me refuse. J'ai le routeur depuis se matin j'ai pas encore eu le temps de lire la documentation au complet et regarder partout si ils en parlent mais ça m'étonnerait.

Moi il me semble qu'une solution serait de faire de router le port 22 du routeur vers le port 22 d'une des machines du réseau local ??? on sait faire ça avec un routeur classique ?

Merci de m'éclairer sur la question :)
Back to top
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Tue Jan 25, 2005 11:57 pm    Post subject: Reply with quote

zdra wrote:
Moi il me semble qu'une solution serait de faire de router le port 22 du routeur vers le port 22 d'une des machines du réseau local ??? on sait faire ça avec un routeur classique ?

oui c'est la solution la meilleure, et normalement tous les routeurs y arrivent
_________________
http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Back to top
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1888
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Wed Jan 26, 2005 8:44 am    Post subject: Reply with quote

Clap clap clap !

Excellent travail ! 19/20 ! (oui, parcequ'on peut toujours faire mieux :lol:).
_________________
Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres.
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4912

PostPosted: Wed Jan 26, 2005 9:19 am    Post subject: Reply with quote

je pensais : ça serait intéréssant d'ajouter une partie sur sftp, et les possibilités de tunnel sftp (ça doit être les mêmes que pour ssh non? vu que c finalement les mêmes outils), et l'utilisation par gftp etc...(j'ai un peu essayer, j'ai pas réussis à utiliser les hostname pré-configuré dans .ssh/config avec gftp...). je vais continuer à tester ça.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum