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


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.


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.


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.

  • 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 clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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