Différences entre versions de « OpenSSH »
Ligne 11 : | Ligne 11 : | ||
</pre> | </pre> | ||
+ | Variante avec la nouvelle option -W de ssh (-W IP:PORT connecte l'entree stdin du client ssh | ||
+ | vers l'IP et le PORT spécifié). | ||
+ | <pre> | ||
+ | Host monclient-hote1 | ||
+ | HostKeyAlias monclient-hote1 | ||
+ | ProxyCommand ssh -W hote-1:22 root@passerelle.monclient.com | ||
+ | </pre> | ||
Pour accéder à la machine: | Pour accéder à la machine: | ||
ssh moi@monclient-hote1 | ssh moi@monclient-hote1 | ||
Ligne 32 : | Ligne 39 : | ||
=== Pour accéder via un navigateur === | === Pour accéder via un navigateur === | ||
+ | Surcharge d'entête: | ||
+ | <pre> | ||
+ | ethernet/IP/TCP/SSH/TCP-transporté | ||
+ | </pre> | ||
− | On peut mettre en place un proxy SOCKS: | + | On peut demander a la connexion de transporter un flux TCP: |
+ | * à l'établissement de la connexion avec | ||
+ | ** (connexion locale vers distant) -L<port-local>:<machine-distante>:<port-distant> | ||
+ | ** (connexion distante vers locale) -R<port-distant>:<machine-locale>:<port-local> | ||
+ | * pendant la connexion en tapant: <pre> <retour chariot>~</pre> puis le <pre>-L.../-R...</pre> comme au dessus | ||
+ | |||
+ | On peut mettre en place un proxy SOCKS (connexion locale vers distant): | ||
ssh moi@monclient-hote1 -D9000 | ssh moi@monclient-hote1 -D9000 | ||
Ligne 40 : | Ligne 57 : | ||
Vous pouvez ensuite accéder aux services internes de monclient à partir de votre navigateur de manière transparente. | Vous pouvez ensuite accéder aux services internes de monclient à partir de votre navigateur de manière transparente. | ||
+ | |||
+ | === Pour accéder via réseau === | ||
+ | ==== Niveau IP (tun) ==== | ||
+ | avec les nouvelles options (-w) de ssh: | ||
+ | * Pour: permet l'accès générique à un plus grand nombre de machine (pas qu'en Socks) | ||
+ | * Contre: | ||
+ | ** surcharge d'entête (overhead): <pre> ethernet/IP/TCP/SSH/IP-transportée/TCP-transporté </pre> | ||
+ | ** par nature pas adapté au trafic type UDP (voix) pour lequel un OpenVPN sera mieux armé. | ||
+ | |||
+ | Côté serveur (/etc/ssh/sshd_config): ajoutez | ||
+ | <pre> | ||
+ | PermitTunnel yes | ||
+ | </pre> | ||
+ | |||
+ | Côté client faites (en tant que root) un | ||
+ | <pre> | ||
+ | # ssh -w 0:0 root@serveur | ||
+ | </pre> | ||
+ | cela va créer une interface tun0 sur le client et sur le serveur. | ||
+ | Attribuez une IP différente mais dans la même plage au client et au serveur (et accessoirement dans une plage non utilisée, ni par le client ni par le serveur). | ||
+ | Ex. | ||
+ | * Côté serveur: <pre>ifconfig tun0 172.16.21.254/24</pre> | ||
+ | * Côté client: <pre>ifconfig tun0 172.16.21.253/24</pre> | ||
+ | Depuis le client, vous pouvez maintenant pinguer le serveur: <pre>ping 172.16.21.254</pre> | ||
+ | Le routage standard s'applique (ip_forward, iptables) | ||
+ | ==== Niveau ethernet (tap) ==== | ||
+ | * Pour: | ||
+ | ** accès niveau ethernet (arp etc.) | ||
+ | ** très pratique dans le contexte de machine virtuelles (xen, kvm, lxc) se raccrochant à un bridge pour établir des maquettes. | ||
+ | * Contre: | ||
+ | ** un maximum de surcharge d'entête (overhead): <pre> ethernet/IP/TCP/SSH/ethernet-transporté/IP-transportée/TCP-transporté </pre> | ||
+ | ** par nature pas adapté au trafic type UDP (voix) pour lequel un OpenVPN sera mieux armé. | ||
+ | |||
+ | Comme au dessus avec côté client: | ||
+ | <pre> | ||
+ | # ssh -w 0:0 -o Tunnel=ethernet root@serveur | ||
+ | </pre> | ||
+ | Cela crée une paire de "tap0" au lieu des "tun0". | ||
+ | Au niveau fonctionnement IP, cela réagit de la même façon: (ifconfig tap0...) | ||
+ | Mais une tap0 peut être inclue dans un bridge: | ||
+ | |||
+ | Admettons qu'on ait côté serveur: | ||
+ | <pre> | ||
+ | # brctl show | ||
+ | bridge name bridge id STP enabled interfaces | ||
+ | br0 8000.002215aad64b no eth0 | ||
+ | </pre> | ||
+ | |||
+ | on inclut l'interface tap0 dans le bridge (toujours côté serveur): | ||
+ | <pre> | ||
+ | brctl addif br0 tap0 | ||
+ | ifconfig tap0 up | ||
+ | </pre> | ||
+ | on ne configure pas d'adresse IP côté serveur (c'est celle du bridge br0 qui sera utilisée). | ||
+ | |||
+ | Côté client on configure |
Version du 6 mars 2012 à 15:12
Se connecter sur une machine derrière une passerelle
Avec des raccourcis
Config client (~/.ssh/config
):
Host monclient-hote1 ProxyCommand ssh root@passerelle.monclient.com $SSH_PROXY_FLAGS nc -w60 hote1 22 Host monclient-hote2 ProxyCommand ssh root@passerelle.monclient.com $SSH_PROXY_FLAGS nc -w60 hote2 22
Variante avec la nouvelle option -W de ssh (-W IP:PORT connecte l'entree stdin du client ssh vers l'IP et le PORT spécifié).
Host monclient-hote1 HostKeyAlias monclient-hote1 ProxyCommand ssh -W hote-1:22 root@passerelle.monclient.com
Pour accéder à la machine:
ssh moi@monclient-hote1
Variante: si le réseau distant dispose d'un domaine local, on peut simplifier:
Host hote1.monclient.local ProxyCommand ssh root@passerelle.monclient.com $SSH_PROXY_FLAGS nc %h %p
Pour accéder à la machine:
ssh moi@hote1.monclient.local
En partageant ssh-agent
Autre solution moins sécurisée:
ssh moi@monclient-hote1 -A ssh moi@hote1
Moins sécurisée, parce que -A partage le gestionnaire de clefs (ssh-agent) avec hôte distant, et son administrateur peut alors accéder à votre clef. À ne faire que sur des machines que vous administrez seul.
Surcharge d'entête:
ethernet/IP/TCP/SSH/TCP-transporté
On peut demander a la connexion de transporter un flux TCP:
- à l'établissement de la connexion avec
- (connexion locale vers distant) -L<port-local>:<machine-distante>:<port-distant>
- (connexion distante vers locale) -R<port-distant>:<machine-locale>:<port-local>
- pendant la connexion en tapant:
<retour chariot>~
puis le-L.../-R...
comme au dessus
On peut mettre en place un proxy SOCKS (connexion locale vers distant):
ssh moi@monclient-hote1 -D9000
Configurer ensuite votre navigateur, dans ses propriétés réseau, pour utiliser un proxy SOCKS sur localhost:9000. Attention: les DNS ne sont pas impactés par ce proxy.
Vous pouvez ensuite accéder aux services internes de monclient à partir de votre navigateur de manière transparente.
Pour accéder via réseau
Niveau IP (tun)
avec les nouvelles options (-w) de ssh:
- Pour: permet l'accès générique à un plus grand nombre de machine (pas qu'en Socks)
- Contre:
- surcharge d'entête (overhead):
ethernet/IP/TCP/SSH/IP-transportée/TCP-transporté
- par nature pas adapté au trafic type UDP (voix) pour lequel un OpenVPN sera mieux armé.
- surcharge d'entête (overhead):
Côté serveur (/etc/ssh/sshd_config): ajoutez
PermitTunnel yes
Côté client faites (en tant que root) un
# ssh -w 0:0 root@serveur
cela va créer une interface tun0 sur le client et sur le serveur. Attribuez une IP différente mais dans la même plage au client et au serveur (et accessoirement dans une plage non utilisée, ni par le client ni par le serveur). Ex.
- Côté serveur:
ifconfig tun0 172.16.21.254/24
- Côté client:
ifconfig tun0 172.16.21.253/24
Depuis le client, vous pouvez maintenant pinguer le serveur:
ping 172.16.21.254
Le routage standard s'applique (ip_forward, iptables)
Niveau ethernet (tap)
- Pour:
- accès niveau ethernet (arp etc.)
- très pratique dans le contexte de machine virtuelles (xen, kvm, lxc) se raccrochant à un bridge pour établir des maquettes.
- Contre:
- un maximum de surcharge d'entête (overhead):
ethernet/IP/TCP/SSH/ethernet-transporté/IP-transportée/TCP-transporté
- par nature pas adapté au trafic type UDP (voix) pour lequel un OpenVPN sera mieux armé.
- un maximum de surcharge d'entête (overhead):
Comme au dessus avec côté client:
# ssh -w 0:0 -o Tunnel=ethernet root@serveur
Cela crée une paire de "tap0" au lieu des "tun0". Au niveau fonctionnement IP, cela réagit de la même façon: (ifconfig tap0...) Mais une tap0 peut être inclue dans un bridge:
Admettons qu'on ait côté serveur:
# brctl show bridge name bridge id STP enabled interfaces br0 8000.002215aad64b no eth0
on inclut l'interface tap0 dans le bridge (toujours côté serveur):
brctl addif br0 tap0 ifconfig tap0 up
on ne configure pas d'adresse IP côté serveur (c'est celle du bridge br0 qui sera utilisée).
Côté client on configure