$HOME/.ssh/config 中的 SSH 客户端自定义端口不起作用

$HOME/.ssh/config 中的 SSH 客户端自定义端口不起作用

我正在为我的 OpenSSH 客户端使用一个配置文件,而不是在需要时在命令行中定义选项,以下是我的配置文件中的示例:

$ cat ~/.ssh/config

---- 此处删除最重要的部分 ----

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

当我尝试 ssh 到该主机时:

$ ssh hmnw

它不起作用。

但当我这样做

$ ssh -p 60022 hmnw

它通过了。

出于好奇,我strace对此过程做了以下操作:

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

我知道它正在尝试连接到默认 SSH 端口 22。

注意:上面更改了我的实际主机名和 IP 地址。

我究竟做错了什么?

我的 ssh 版本

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

根据@muru 的建议添加此内容

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

答案1

我在配置中找到了问题所在,这是我基于假设而犯的错误:

~/.ssh/config我的文件顶部

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

此处的端口2222覆盖了60022下面属于的端口hmnw

Port 2222从中删除Host *,现在它可以工作了。

更新:根据@muru 的建议,将默认配置从文件顶部移到底部config允许我使用自定义端口条目作为默认*

@steeldriver 的建议Host * !hmnw也很有用,我还没有使用它的案例,但我可以看到如果需要的话它可以允许我否定特定主机的某些设置。

答案2

看起来远程控制(在 ubuntu 16.04 上)默认不使用 ~/.ssh/config,这与OpenSSH 客户端配置,说

命令行选项优先于配置文件。接下来使用用户特定的配置文件 ~/.ssh/config。最后使用全局 /etc/ssh/ssh_config 文件。将使用每个配置参数的第一个获取的值。

以下两种解决方案仍然有效:

  1. sudo ssh -F ~/.ssh/config the_name_after_Host
  2. 将配置行放在文件中/etc/ssh/ssh_config(在文件的开头),而不是~/.ssh/config

相关内容