View previous topic :: View next topic |
Author |
Message |
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Tue Jan 18, 2005 6:29 pm Post subject: [Howto] Tunnels et utilisation avancée de ssh |
|
|
"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 |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Tue Jan 18, 2005 6:35 pm Post subject: |
|
|
Alors la !!!! Merci tout plein pour le beau HOWTO !! _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
Polo l33t
Joined: 27 Jan 2004 Posts: 649 Location: Angers, France
|
Posted: Tue Jan 18, 2005 6:37 pm Post subject: |
|
|
ouai, bravo!!!
a ajouter dans la liste des howtos, et en bonne place |
|
Back to top |
|
|
Celeborn Tux's lil' helper
Joined: 24 Jan 2004 Posts: 132 Location: Heidelberg (Germany)
|
Posted: Tue Jan 18, 2005 6:43 pm Post subject: |
|
|
Que dire...... Merci
je crois que ça résume bien la situation ! |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Tue Jan 18, 2005 6:56 pm Post subject: |
|
|
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 |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Tue Jan 18, 2005 7:11 pm Post subject: |
|
|
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 _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
babykart Guru
Joined: 08 Oct 2004 Posts: 415
|
Posted: Tue Jan 18, 2005 7:16 pm Post subject: |
|
|
impek'...
un grand merci _________________ >> Gentoo-FR <<
----- |
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Tue Jan 18, 2005 7:25 pm Post subject: |
|
|
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 ! |
|
Back to top |
|
|
zdra Veteran
Joined: 30 Nov 2003 Posts: 1693 Location: Bruxelles, Belgique
|
Posted: Tue Jan 18, 2005 7:30 pm Post subject: |
|
|
Pour tout dire, j'imprime !!! c'est un topic que j'aurais fini par poster sous forme d'une question pendant les vacs
merci
Quote: | Le format y est documenté dns "man ssh_config" |
dns -> dans
Pour le X11forwarding moi ça foire à cause de ça: https://bugs.gentoo.org/show_bug.cgi?id=70585 |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Tue Jan 18, 2005 7:55 pm Post subject: |
|
|
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 |
|
|
bob1977 Guru
Joined: 16 Mar 2004 Posts: 387
|
Posted: Tue Jan 18, 2005 10:09 pm Post subject: |
|
|
Très bon Howto! Félicitations |
|
Back to top |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Wed Jan 19, 2005 8:03 am Post subject: |
|
|
Wow! direction bookmark de suite! Merci!!! |
|
Back to top |
|
|
Trevoke Advocate
Joined: 04 Sep 2004 Posts: 4099 Location: NY, NY
|
Posted: Wed Jan 19, 2005 1:35 pm Post subject: |
|
|
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.. _________________ Votre moment detente
What is the nature of conflict? |
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Wed Jan 19, 2005 3:29 pm Post subject: |
|
|
Nan je le garde !
Je sais que tu es méchant !
Cet aprem je n'arrivai pas à accéder à ma machine depuis la fac, en fait je ne l'avais pas allumé avant de partir |
|
Back to top |
|
|
Trevoke Advocate
Joined: 04 Sep 2004 Posts: 4099 Location: NY, NY
|
|
Back to top |
|
|
Enlight Advocate
Joined: 28 Oct 2004 Posts: 3519 Location: Alsace (France)
|
Posted: Wed Jan 19, 2005 3:46 pm Post subject: |
|
|
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!!! |
|
Back to top |
|
|
yuk159 Veteran
Joined: 18 Apr 2003 Posts: 1803 Location: noumea ,nouvelle-caledonie
|
Posted: Thu Jan 20, 2005 9:52 pm Post subject: |
|
|
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!
Instagram |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Fri Jan 21, 2005 5:04 am Post subject: |
|
|
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 _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Sat Jan 22, 2005 10:19 pm Post subject: |
|
|
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 |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Sat Jan 22, 2005 10:33 pm Post subject: |
|
|
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... |
|
Back to top |
|
|
zdra Veteran
Joined: 30 Nov 2003 Posts: 1693 Location: Bruxelles, Belgique
|
Posted: Tue Jan 25, 2005 11:31 pm Post subject: |
|
|
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 |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Tue Jan 25, 2005 11:57 pm Post subject: |
|
|
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 |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Wed Jan 26, 2005 8:44 am Post subject: |
|
|
Clap clap clap !
Excellent travail ! 19/20 ! (oui, parcequ'on peut toujours faire mieux ). _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Wed Jan 26, 2005 9:19 am Post subject: |
|
|
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 |
|
|
|