在 Mac OS X 中配置 SSH 客户端以使用不同的端口

在 Mac OS X 中配置 SSH 客户端以使用不同的端口

我有一个.ssh/config文件配置为使用 SSH 连接到不同的服务器:

###
# Identity files
###
IdentityFile ~/.ssh/id_dsa_home
IdentityFile ~/.ssh/id_dsa_github
IdentityFile ~/.ssh/id_rsa_bitbucket

###
# Global options
###
PasswordAuthentication no
PubkeyAuthentication yes

Host *
  Port 22

Host icarus
  User elitalon
  HostName 192.168.1.1
  Port 54301

Host zeus
  User elitalon
  HostName 192.168.2.1
  Port 54302

Host github
  User git
  HostName github.com

Host bitbucket
  User git
  HostName bitbucket.org

此配置以前工作正常。但是,自从我升级到 Mac OS X Mountain Lion 后,SSH 对于条目Port中的特定值的行为有所不同Host

  1. 如果我尝试连接到zeusSSH,总是使用端口 22,而不是 54301。
  2. 如果我删除Port 22并尝试连接到Host没有Port条目的,SSH 将使用第一个Port值集(此示例中为 54301)。

尝试不同的组合后,SSH 似乎处理所有配置文件,但只采用Port指定的第一个值,根据手册页,这是预期的行为:

对于每个参数,将使用第一个获得的值

但手册页还指出

配置文件包含由“主机”规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。

所以我认为,如果不指定任何Port值,默认端口就会改变仅有的在那些确实有价值的部分Port

Host那么,除非指定了其他值,否则我该如何设置条目以使用端口 22?

谢谢!

答案1

由于使用了每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。

所以

Host *
  Port 22

应移至末尾。

答案2

将“Host *”声明放在所有其他主机声明之后,以防止其覆盖其他主机声明。但实际上您根本不需要此声明,因为默认情况下 SSH 使用端口 22。

相关内容