в каждую машину каждому пользователю, под которым надо войти, в ~/.ssh/authorized_keys прописываешь ключ машины, с которой заходишь.
пользователя, под которым надо заходить пишешь в имени целевой машины ssh user@hostname
40 пар? А какой сценарий, своя пара для каждой целевой системы?
Имхо следует просто поменять подход, например использовать по уникальной паре для каждой системы откуда возможно подключение или вовсе одну пару, если уверен в сохранности ключа.
скрипт, обходящий машины и удаляющий строчку из ~/.ssh/authorized_keys с ключом, оканчивающимся на определенный комент.
или скрипт меняющий старый ключ на новый, выборка опять же по коменту в конце строки.
для ентого собственного authorized_keys и существует.
На каждый сервер идет 2 пары. 40 это как пример, а не утверждение.
Пробовал разделение по dev,satage и тд серверам, каждый сервер 2 пары. Этот вариант хорош, нету много ключей. Но тогда ключи от одного dev подходит для другого, что не желательно.
Пробовал на каждый сервер свой ключ пара, безопасно но получается 100500 ключей и за всеми следить тяжело.
Ищу вариант централизовано хранить ключи и осуществлять без проблемную ротацию. Сейчас смотрю в LDAP, AD и еще HASHICORP VAULT.
Сертификат подписывается CA ключом, и в нём есть всякая дополнительная информация такая как: скрок действия, на кого распостраняется, какие действия позволяет совершать.
Использовать уже Identity Management, типа FreeIPA, не рассматривал? Туда каждый пользователь загружает открытую часть ключа, аутентификация на хостах по ним. При увольнении тупо блокируешь пользователя. Есть Host-Based Access Control для разделения доступов.