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
Dire a SSH ne se connecter malgré que la clef ne soit pas celle qu'on attend
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.
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