Table des matières

, , , , ,

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

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