{{tag>SSH verification clef forward port keepalive}}
====== SSH ======
===== SSH client =====
==== 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 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//
echo "NoHostAuthenticationForLocalhost yes">> ~/.ssh/config
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
==== Dire a SSH ne se connecter malgré que la clef ne soit pas celle qu'on attend ====
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
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 :
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no utilisateur@machine.mondomaine.com
Comme toujours avec SSH il est possible d'activer ces options par machine dans le fichier ~/.ssh/config, en y ajoutant par exemple :
Host machine
Hostname machine.mondomaine.com
User utilisateur
HostKeyAlias machine
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
==== Eviter les deconnexions automatiques en simulant de l'activité reseau ====
Si jamais vous rencontrez sur le chemin reseau des firewall qui coupent les connexions jugées inactives un peu trop souvent, le salut se trouve dans l'option //ServerAliveInterval// du client SSH.
Il suffit d'ajouter par exemple //ServerAliveInterval 60// dans votre ~/.ssh/config pour simuler de l'activité toutes les 60 secondes : echo 'ServerAliveInterval 60' >> ~/.ssh/config
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 :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
Pour ajouter un forward de port, il faut donc utiliser ~C , puis taper au prompt ssh> :
-L 8080:localhost:8080
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 à :
ssh> -L 4242:localhost:4242
Forwarding port.
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.
===== 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 :# apt-get install libpam-systemd dbus