I'm using a config file for my OpenSSH client instead of defining options in command line whenever needed, sample from my config file:

$ cat ~/.ssh/config


Host hmnw
        Hostname hmnw.mydomain.com 
        User myname
        Port 60022
        IdentityFile ~/.ssh/id_rsa

When I try to ssh to this host:

$ ssh hmnw

It doesn't work.

But when I do

$ ssh -p 60022 hmnw

It goes through.

Out of curiosity, I did strace on this process:

$ ssh hmnw&
$ sudo strace -p $!
connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("XX.XX.XX.XX")}, 16

I understand it is trying to connect to default SSH port 22.

Note: Changed my actual hostname and IP address above.

What am I doing wrong?

My ssh version

$ ssh -V
OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g  1 Mar 2016

Adding this after @muru's suggestion

$ ssh -vvvv hmnw                                                            
OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /home/myname/.ssh/config
debug1: /home/myname/.ssh/config line 2: Applying options for *
debug1: /home/myname/.ssh/config line 21: Applying options for hmnw
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: resolving "hmnw.mydomain.com" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to hmnw.mydomain.com [xx.xx.xx.xx] port 22.
  • Add the output of ssh -v hmnv please. – muru Oct 20 '16 at 5:01
  • @muru Added -vvvv output. Thanks for reminder – sdkks Oct 20 '16 at 5:52
  • Methinks you are not telling us everything; especially when you say you provide a "sample" of your configuration file, you may have omitted something significant. Also, I am pretty certain you are not actually running the command ssh -p hmnw. – fkraiem Oct 20 '16 at 5:57
  • @fkraiem my mistake I omitted port there – sdkks Oct 20 '16 at 5:59
  • @fkraiem This is how I log in manually – sdkks Oct 20 '16 at 6:06

I found the offender piece in configuration, it is my mistake based on an assumption:

Top of my ~/.ssh/config file

### default for all ##
Host *
     ForwardAgent no
     ForwardX11 no
     ForwardX11Trusted yes
     User myname
     Port 2222
     Protocol 2
     ServerAliveInterval 30
     ServerAliveCountMax 120

Port 2222 here was overriding Port 60022 below which belongs to hmnw.

I removed Port 2222 from Host * , now it works.

Update: As per @muru's suggestion, moving default config from top to bottom of config file allows me to use custom port entry for default *

@steeldriver's suggestion Host * !hmnw is also useful, I don't have a use case for it yet but I can see it would allow me to negate certain settings for particular host, if I needed to.

  • 4
    Keep the default Host * stanza at the end of the file. – muru Oct 20 '16 at 6:36
  • 1
    IIRC you can use negations to exclude certain hosts from wildcard matches e.g. Host * !hmnw - see Stop ssh config on first match – steeldriver Oct 20 '16 at 13:51

It seems that ssh (on ubuntu 16.04) doesn't not use ~/.ssh/config by default which contradict the guide on OpenSSH client configuration, saying that

Command-line options take precedence over configuration files. The user-specific configuration file ~/.ssh/config is used next. Finally, the global /etc/ssh/ssh_config file is used. The first obtained value for each configuration parameter will be used.

While the following two solutions still work:

  1. sudo ssh -F ~/.ssh/config the_name_after_Host
  2. put the configuration lines in file /etc/ssh/ssh_config (at the beginning of the file) instead of ~/.ssh/config

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.