Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

is anybody knows how can I pass the ssh_port with ssh-copy-id to enable password less remote ssh login..

share|improve this question
up vote 4 down vote accepted

ssh-copy-id is just a shell script, so you can put the "-p " in the script where the "ssh $1" line is, change to "ssh -p <alternateport> $1"

I would recommend copying the system one to your home directory and modifying that instead of modifying the installed one directly.

Here is modified example using a variable at the top of the script (named SSH) you can modify easily to add whatever ssh options you want. In your case, replace PORTNUM with the port you are interested in:


# Shell script to install your public key on a remote machine
# Takes the remote machine name as an argument.
# Obviously, the remote machine must accept password authentication,
# or one of the other keys in your ssh-agent, for this to work.

SSH="/usr/bin/ssh -p PORTNUM"

if [ "-i" = "$1" ]; then
  # check if we have 2 parameters left, if so the first is the new ID file
  if [ -n "$2" ]; then
    if expr "$1" : ".*\.pub" > /dev/null ; then
    shift         # and this should leave $1 as the target name
  if [ x$SSH_AUTH_SOCK != x ] ; then
    GET_ID="$GET_ID ssh-add -L"

if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then
  GET_ID="cat ${ID_FILE}"

if [ -z "`eval $GET_ID`" ]; then
  echo "$0: ERROR: No identities found" >&2
  exit 1

if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
  echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2
  exit 1

{ eval "$GET_ID" ; } | ${SSH} $1 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys; test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys" || exit 1

cat <<EOF
Now try logging into the machine, with "ssh '$1'", and check in:


to make sure we haven't added extra keys that you weren't expecting.

share|improve this answer

Create a config-file for ssh, it has to be ~/.ssh/config and add the following lines to the file.

Host <name>
    HostName <the host to connect to>
    Port <the_port_number>
    User <your user_name>

If you then do a "ssh-copy-id -i ... " it will work.

share|improve this answer

I found that you can also pass the ssh command to the original script like so:

ssh-copy-id -i .ssh/ " -p 1234"

So you quote the part that gets passed to ssh as the host url and the ssh program picks up the port argument.

share|improve this answer
ssh-copy-id command works successfully but still when I tries to connect with same host/port, its asking me for password every time – shahjapan Apr 4 '11 at 13:20

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.