Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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

3 Answers 3

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:

#!/bin/sh

# 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.

ID_FILE="${HOME}/.ssh/id_rsa.pub"
SSH="/usr/bin/ssh -p PORTNUM"

if [ "-i" = "$1" ]; then
  shift
  # 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
      ID_FILE="$1"
    else
      ID_FILE="$1.pub"
    fi
    shift         # and this should leave $1 as the target name
  fi
else
  if [ x$SSH_AUTH_SOCK != x ] ; then
    GET_ID="$GET_ID ssh-add -L"
  fi
fi

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

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

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

{ 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:

  .ssh/authorized_keys

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

EOF
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/id_dsa.pub "user@host.com -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

 
discard

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.