Each server's ssh port should not open to the public, it is dangerous.
Isso não é verdade, especialmente se você estiver usando chaves com boas frases secretas e tiver logins de senha desativados (você ainda não o fez).
If one server is accessed by multiple person with the same account, we cannot tell who is logged in.
Em seu cenário atual, isso está correto - as contas compartilhadas não são uma boa coisa. No entanto, com registros detalhados do sshd a> você pode ver quem efetuou login quando.
It is hard to remove or revoke someone's ssh key for those server's.
Existem ferramentas disponíveis que permitirão que isso seja automatizado - fantoche, chef, ansible etc - ferramentas de gerenciamento de configuração em geral.
Uma solução geral para você problema é
- Forneça a todos uma conta própria (automatize-a com uma ferramenta de gerenciamento de configuração)
- Pare de usar contas compartilhadas.
- Conceda acesso adequado a sudo a todos.
- Use o rsyslog para enviar todos os logs para um servidor de log central.
Isso permite que você registre os usuários individuais que acessam o sistema. Com uma educação adequada, você também pode registrar usuários individuais usando a conta administrativa.