I've started using SSH keys instead of passwords just recently (thanks to GitHub, of course), so please keep in mind that I'm pretty new to this whole concept. Currently my keys simply lay in ~/.ssh, but I'm not sure if this is a good practice. E.g. if I have multiple machines, I'd need to duplicate private keys, which I think is undesirable. Also, if my HDD go kaput, I'll lose my private key, which (I guess) is undesirable as well.
So, what are best practices on storing SSH keys securely, conveniently, and reliably?
Seems like using a smartcard is an option (see Smartcards for storing gpg/ssh keys (Linux) - what do I need?), is this the best one?
Update: The reason for the question was that many services (like GitHub, AWS EC2) provide guides how to set up SSH keys for using the service, but little or no background info (like, what to do if you already have some key generated by ssh-keygen [1], what are recommended security measures). And it's unclear whether that info is in fact unimportant, or you're expected to know it ‘by default’.
So, seems like in this case it's the former, and you can just leave your private keys in ~/.ssh as long as you keep them from other people; but make sure that you have another way to access the service to upload or generate a new key if you lose one (which is normally the case). (However, if you have something to add to the accepted answer, please do.)
[1] GitHub, as it turned out, provides some help on how to manage multiple keys.