Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sysadmin:tips:ssh [2010/12/13 10:30] james grammaire |
sysadmin:tips:ssh [2017/10/27 17:53] (Version actuelle) james ajout fix fermeture connexion ssh systemd halt/reboot |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>SSH verification clef forward port keepalive}} | ||
====== SSH ====== | ====== SSH ====== | ||
Ligne 5: | Ligne 6: | ||
==== Dire a SSH ne ne pas vérifier la clef de l'hote localhost ==== | ==== Dire a SSH ne ne pas vérifier la clef de l'hote localhost ==== | ||
- | Si comme moi vous êtes friands de tunnels SSH et/ou que vous changez fréquemment de machine en utilisant le même homedir (NFS par exemple), SSH se plaind que la clef a changé, ce qui vous oblige a la supprimer du fichier ~/.ssh/known_hosts.\\ La solution est de rajouter dans votre configuration SSH //NoHostAuthenticationForLocalhost yes// | + | Si comme moi vous êtes friands de tunnels SSH et/ou que vous changez fréquemment de machine en utilisant le même homedir (NFS par exemple), SSH se plaint que la clef a changé, ce qui vous oblige a la supprimer du fichier ~/.ssh/known_hosts.\\ La solution est de rajouter dans votre configuration SSH //NoHostAuthenticationForLocalhost yes// |
<code>echo "NoHostAuthenticationForLocalhost yes">> ~/.ssh/config</code><note important>Cela diminue bien sur la sécurité concernant l'accès aux machines accédées par "ssh localhost" : machines locales et machines accédées via tunnel</note> | <code>echo "NoHostAuthenticationForLocalhost yes">> ~/.ssh/config</code><note important>Cela diminue bien sur la sécurité concernant l'accès aux machines accédées par "ssh localhost" : machines locales et machines accédées via tunnel</note> | ||
+ | |||
+ | ==== Dire a SSH ne se connecter malgré que la clef ne soit pas celle qu'on attend ==== | ||
+ | |||
+ | <note warning>Attention, n'utilisez ceci (surtout couplé a une authentification par mot de passe) uniquement si vous êtes **certains** que vous communiquez avec la bonne machine</note> | ||
+ | |||
+ | Il peut etre utile, par exemple lorsqu'on démarre une machine sur un liveCD pour s'y connecter en SSH de completement désactiver temporairement la vérification de clef : la clef connue ne correspond alors pas a la clef habituelle de la machine. Pour ce faire, on peut utiliser la comande suivante pour se connecter : | ||
+ | <code>ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no utilisateur@machine.mondomaine.com</code> | ||
+ | |||
+ | Comme toujours avec SSH il est possible d'activer ces options par machine dans le fichier ~/.ssh/config, en y ajoutant par exemple :<code> | ||
+ | Host machine | ||
+ | Hostname machine.mondomaine.com | ||
+ | User utilisateur | ||
+ | HostKeyAlias machine | ||
+ | StrictHostKeyChecking no | ||
+ | UserKnownHostsFile /dev/null | ||
+ | </code> | ||
==== Eviter les deconnexions automatiques en simulant de l'activité reseau ==== | ==== Eviter les deconnexions automatiques en simulant de l'activité reseau ==== | ||
Ligne 15: | Ligne 32: | ||
Vous pouvez ajouter cette directive en global ou seulement pour un hôte/groupe d'hôte donné. | Vous pouvez ajouter cette directive en global ou seulement pour un hôte/groupe d'hôte donné. | ||
+ | |||
+ | ==== Ajouter a la volée un forward de port ==== | ||
+ | |||
+ | Il est possible avec SSH d'ajouter a la volée un nouveau foward de port (ou d'en supprimer un) sans avoir a ouvrir une nouvelle connexion. | ||
+ | Pour se faire SSH fournit un //Escape Character// qui permet d'effectuer des actions sur la connexion en cours. Par défaut ce caractère est ~ , mais vous pouvez en spécifier un autre via la directive //EscapeChar// dans votre configuration. | ||
+ | |||
+ | Il existe plusieurs actions possibles en utilisant ce caractère spécial. | ||
+ | Par exemple : | ||
+ | ^Caracteres tapés ^ action| | ||
+ | |~.| Termine la connexion SSH en cours (utile pour récupérer votre terminal local si vous avez eu une déconnexion réseau brutale)| | ||
+ | |~?| Affiche la liste des actions possibles avec leur usage | | ||
+ | |~#| Liste les forward de port actuels| | ||
+ | |~C| Ouvre un shell interne au SSH pour vous permettre de gérer les forward de port à la volée | | ||
+ | |||
+ | |||
+ | C'est donc cette derniere directive qui va nous être utile ici :<code>ssh> help | ||
+ | Commands: | ||
+ | -L[bind_address:]port:host:hostport Request local forward | ||
+ | -R[bind_address:]port:host:hostport Request remote forward | ||
+ | -D[bind_address:]port Request dynamic forward | ||
+ | -KR[bind_address:]port Cancel remote forward | ||
+ | </code> | ||
+ | |||
+ | Pour ajouter un forward de port, il faut donc utiliser ~C , puis taper au prompt ssh> :<code> | ||
+ | -L 8080:localhost:8080</code> | ||
+ | |||
+ | Cette syntaxe est donc la même que si vous aviez spécifié ce forward sur la ligne de commande. Appuyer ensuite sur entrée pour quitter ce shell. | ||
+ | |||
+ | |||
+ | Vous devriez donc avoir a l'écran quelque chose de similaire à :<code> | ||
+ | ssh> -L 4242:localhost:4242 | ||
+ | Forwarding port.</code> | ||
+ | |||
+ | <note important>Attention, il faut que le caractère d'échappement soit tapé au **début** d'une ligne, le plus simple pour en être sûr est donc d'appuyer avant sur la touche entrée, ce qui nous donne donc par exemple "Entree", "Alt Gr+2", "Shift+?" pour afficher l'aide.</note> | ||
+ | |||
+ | |||
+ | ===== serveur SSH ===== | ||
+ | {{tag>SSH halt reboot connexion hang systemd jessie}} | ||
+ | |||
+ | ==== sshd et systemd sont dans un bateau ==== | ||
+ | Suite au passage plus ou moins volontaire a systemd, par exemple en mettant a jour votre Debian en stretch, il arrive souvent que lorsqu'on fait un halt/reboot de machine, le SSH ne rende pas la main avant que ca tranche inexorablement. | ||
+ | |||
+ | |||
+ | Pour fermer la sessions SSH proprement automatiquement : | ||
+ | en gros systemd essaye de tout fermer le plus rapidement possible, et dans son infinie précipitation il coupe d'abord le réseau avant de penser à fermer ce qui l'utilisait : par exemple les sessions SSH qui ne pourront donc plus se fermer correctement ... sans réseau. | ||
+ | |||
+ | Du coup pour avoir une fermeture correcte de tout le bousin, il faut que systemd-logind soit tenu au courant (via dbus) que la session SSH doit etre fermée. | ||
+ | |||
+ | En un mot il faut donc installer //libpam-systemd// et //dbus// , ce qui peut se faire grâce a la commande suivante :<code># apt-get install libpam-systemd dbus</code> | ||
+ | |||