Keybase peut gérer les authentifications SSH par Certificate Authorities. Une fois la clé publique de la CA déployée sur un serveur, la commande kssh
permet de se connecter en SSH a un serveur en générant dynamiquement une clé SSH temporaire signée par la CA.
La gestion des accès de fait en fonction des teams keybase de l'utilisateur.
Procédure pour générer des OTP avec Hashicorp Vault pour les connexions SSH
Le SSH ForwardAgent
est déconseillé car il peut potentiellement exposer les clés SSH (cf. https://julien.mailleret.fr/links/?QRAuyw). Il est désormais recommender d'utiliser ProxyJump
sur les versions d'OpenSSH > 7.3 qui remplace ProxyCommand
.
Voir également: https://heipei.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/
Un outils en go qui s'occupe de mettre à jour automatiquement le fichier ${HOME}/.ssh/authorized_keys
avec les clés publiques d'un user github (ex pour moi: https://github.com/jmlrt.keys).
Jess Fraz oblige, une image docker est disponible.
Comme indiqué dans le README, à ne mettre en place que si on a activé l'authentifiation 2FA sur GitHub et qu'on surveille les clés publiques déployées pour ne pas se faire hacker ces serveurs en cas de hack du compte GitHub).
Pour monter un répertoire distant via ssh:
# install sshfs on client (no additional configuration required on server)
# for debian/ubuntu:
$ sudo apt install sshfs
# create mount point
$ mkdir ~/sshfs
# mount the directory
$ sshfs <remote_host>:/home/<remote_user> ~/sshfs
# umount the directory
$ fusermount -u ~/sshfs
Les bonnes pratiques de sécurité pour SSH par Mozilla
Bonnes pratiques de sécurité pour SSH
Mosh fonctionne comme SSH mais gère les pertes de connexion et les lenteurs réseaux. A tester et à vérifier côté aspects sécurité
Lorsque l'on active le ForwardAgent, SSH-agent expose toutes les clés SSH qu'ils connait à l'ensemble des machines auquelles on se connecte, quelqun ayant accès à la socket SSH-agent sur une des machines, pourrait de ce fait utiliser l'ensemble des clé SSH en utilisabt cette socket.
Imil propose une solution assez complexe pour gérer des groupes de clés SSH et n'exposer que les clés SSH du même groupe.
Il mentionne aussi l'option IdentitiesOnly de base dans SSH qui permet de n'exposer que la clé SSH avec laquelle on se connecte. Cette option beaucoup plus simple doit suffire dans 9 cas sur 10.
Pour activer l'authentification Two-Factor sur un serveur Debian:
$ apt-get install libpam-google-authenticator
$ echo "auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok" >> /etc/pam.d/sshd
$ echo "ChallengeResponseAuthentication yes" >> /etc/ssh/sshd_config
$ echo "AuthenticationMethods publickey,keyboard-interactive" >> /etc /ssh/sshd_config
$ apt-get install ntp
$ service ssh restart
$ google-authenticator -l 'username@servername'
ATTENTION:
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
doit être placé au tout début de /etc/pam.d/sshd- Si
AuthenticationMethods publickey,keyboard-interactive"
n'est pas ajouté, il est possible de se connecter au serveur avec le pin uniquement. Cette ligne nécessite d'avoir la clé privée et le pin. - L'installation de NTP est importante pour avoir a même heure sur le client et le serveur.
EDIT:
Playbook Ansible: twofactorssh.yml
pour gérer des serveurs avec ansible en passant par un bastion SSH:
- Créer le fichier
ansible.cfg
[ssh_connection] ssh_args = -F ssh.cfg control_path = ~/.ssh/mux-%r@%h:%p
- Créer le fichier ssh.cfg:
# Connexion directe avec le bastion. # Pensez à adapter le User et le IdentityFile selon vos besoins. Host bastion Hostname 84.39.41.33 User admin IdentityFile /home/you/.ssh/your_key.pem # Pour toutes les machines de la zone privée : # Vous pouvez renseigner un range d’IPs ou une zone dns, exemple: # *.eu-west-1.compute.amazonaws.com Host 192.168.47.* # Proxifier la connexion au travers du bastion. ProxyCommand ssh -F ssh.cfg -W %h:%p bastion # A adapter à votre cas : le User et la clé pour les connexions aux machines privées. User admin IdentityFile /home/you/.ssh/your_key.pem # Directives de multiplexing SSH Host * ControlMaster auto ControlPath ~/.ssh/mux-%r@%h:%p ControlPersist 15m
2 astuces pour accélerer et simplifier les connexions SSH à travers un bastion:
- Utiliser
ControlMaster
pour que toutes les connexions SSH au bastion passent par la même connexion TCPcat << EOF >> ~/.ssh/config ControlMaster auto ControlPath ~/.ssh/ssh_control_%h_%p_%r EOF
- Utiliser ProxyCommand pour se connecter aux serveurs à travers le bastion:
# Use the bastion to connect to internal resources Host *.internal.example.com ProxyCommand ssh bastion nc %h %p
Commenter SendEnv LANG LC_*
dans /etc/ssh/ssh_config
pour corriger les erreurs de locales quand on se connecte en SSH depuis un poste Linux en locale FR vers un serveur Linux ne possédant pas cette locale.
Hack AWS pour gérer les clés SSH des users dans IAM et permettre aux instances EC2 de récupérer les clés SSH automatiquement
Un script en python qui permet de se connecter en SSH sur une instance EC2 ou un membre d'un autoscaling group à partir de ces metadatas AWS (nom, instance id, ...)