Copy ssh Public key to Server in one line

Update (2011/02/06): you don't really need any of the commands below, you can just use the ssh-copy-id program that comes with ssh.

Here it is:

cat ~/.ssh/ | ssh <a href="mailto:user@hostname">user@hostname</a> "cat - >> ~/.ssh/authorized_keys"

Apparently some people don't like this one that much. :-)

Here's an alternative:

ssh <a href="mailto:user@hostname">user@hostname</a> "echo `cat ~/.ssh/` >> ~/.ssh/authorized_keys"

It doesn't require the first cat or the pipe.



Nice one liner, if your using gentoo theres also a bash script that comes with ssh. /usr/bin/ssh-copy-id just in case you were unaware.

No I wasn't aware of that. Thanks. My main box is Gentoo. The particular one I was using was Ubuntu Server.

There's always scp, so no need to do whacky pipes.

scp ~/.ssh/ <a href="mailto:user@hostname">user@hostname</a>:~/.ssh/authorized_keys

patrick, that only works if you don't mind wiping the authorized_keys file? I need to append a key while keeping the others.

Or if you want it to handle the directory and file maybe being there and maybe not (as well as still appending to existing ones):

cat ~/.ssh/ | ssh user@hostname "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && cat - >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh"

Just what I was looking for. It works just as you describe. The chmod permissions commands are a nice add.

Thanks for the command lines :)

You can't connect to non standard port with ssh-copy-id :(

If you are wanting to add your ssh key to a host to speed up logging into it then you should really have an entry in your ~/.ssh/config file:

Host machine1
 Port 2222
 User user1

This also works with sftp and scp, so makes your life much simpler.

Add new comment