My company is serious about security and willing to move to SSH key-pairs. Users can generate their SSH key pairs independently and I worry if they set a pass-phrase. Can I enforce this? Does signing with ssh-keygen help?
No. You can't enforce on the server side that the key has passphrase. Key is always on the client side and the server sees only the signature of challenge and public key. Certificates (aka signed keys) will not help either, because the public keys are signed.
I propose you to have a look at some kind of two factor authentication or smart cards if you want to go this way in security.
Since we cannot enforce the usage of a passphrase server-side, we have to mitigate the risk by education of the users.
Private ssh-key files are sensitive data that could lead to compromised systems if not managed properly. One way to ensure that a passphrase is used is a formal policy with a penalty for keys found unencrypted. But it is not hard or inconvenient to use ssh-keys properly.
ssh-add on a daily basis provides the same convenience of password-less logon during the shift:
eval $(ssh-agent -s) ssh-add
Note: The Gnome Keyring can store the passphrase for you.
Note: on the Mac you can even store the passphrase in your Keychain:
An extra control is the use of a newer file format and key type that will provide protection for brute-force attacks on the file, if the keys have a passphrase it take a few seconds to load in ssh-agent (brute-forcing will take forever).
ssh-keygen -t ed25519 -a 500