I prefer pushkey over ssh-copy-id

Pushes your ssh key to a remote location. It tries to create a .ssh folder remotley then it adds your ssh key to authorized_keys.
It also applies the correct permissions on the folder and file.
If your ssh key does not exist then it will go through the process of creating one for you.

Tested and working on debian, ubuntu, redhat, centos, suse, freebsd, openbsd (requires bash shell)