Is it possible to run ssh-copy-id on port other than 22?

I have a server with SSH running on a non-standard port. Instead of 22, it runs on 8129. To log in, I use:

ssh -p 8129 hostname

Now, whenever I need to set up a key for password-less login, I have to copy the public key and add it to authorized_keys manually. I discovered that the command ssh-copy-id could be used to simplify this process, but it seems like it does not have an option to specify the port of the ssh server.

Is there some way to tell ssh-copy-id to use port 8129, or should I just forget about this command and copy/paste manually as before?

A quick look at the source indicates that ssh-copy-id appears to have no function that permits this. However, you could do something like the following instead:

ssh -p8129 user@host 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub
Answered By: Chris Down

ssh-copy-id doesn’t take any arguments that it could pass down to the underlying ssh command, but you can configure an alias in ~/.ssh/config.

Host myhost
HostName hostname
Port 8129

Then run ssh-copy-id myhost.

I have always used scp to copy it over:

scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'

Though I must say, I’ll probably be using the other (one-line/connection) methods if I remember them in the future. But this is another option for you.

Answered By: Kevin

This works (from here):

ssh-copy-id -i ~/.ssh/ '-p 221 username@host'
Answered By: DJR
$ ssh-copy-id "-p 8129 user@host"


NOTE: The port must be in front of the user@host or it will not resolve

Editor’s note: as pointed out in comments and shown in other answers, ssh-copy-id as shipped by more recent versions of OpenSSH supports the -p <port_number> syntax (no quotes needed).

Answered By: Jsan

As of openssh-client_6.2 there is now a dedicated port flag for the command allowing for this syntax:

ssh-copy-id -p 8129 user@example

It also added support for adding other ssh options with the -o flag.

Here’s is Ubuntu’s man page for the appropriate version, introduced in 13.04:

Answered By: Colton McCormack

With my macOS, this worked.

ssh-copy-id -i ~/.ssh/ -p <port> user@host
Answered By: Jin Kwon

On CentOS7 is just:

 ssh-copy-id "-p 1234" user@host

Please take care to don’t place user@host within the quotes or you’ll get the following error in this distribution:

/usr/bin/ssh-copy-id: ERROR: Bad port ' 1234 user@host'
Answered By: Max Cuttins

I use this command:

ssh-copy-id ssh://user@ip_addr:port


ssh-copy-id ssh://root@

Answered By: Carlos

There four ways to achieve this:

1. Using ssh-copy-id

ssh-copy-id -p <port> <user>@<remote-host>

1.1 On CentOS

ssh-copy-id "<user>@<remote-host> -p <port>"

2. Using SSH

ssh -p <port> <user>@<remote-host> 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_*.pub

3. Using SCP

scp -P <port> ~/.ssh/id_*.pub <user>@<remote-host>:
ssh -p <port> <user>@<remote-host> 'cat id_*.pub >> ~/.ssh/authorized_keys'

4. Using ~/.ssh/config file

## Host <alias>
##   Hostname <remote-host>
##   Port <port>
##   User <user>
ssh-copy-id <alias>
Answered By: Teocci
Categories: Answers Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.