我有一个.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
:
- 如果我尝试连接到
zeus
SSH,总是使用端口 22,而不是 54301。 - 如果我删除
Port 22
并尝试连接到Host
没有Port
条目的,SSH 将使用第一个Port
值集(此示例中为 54301)。
尝试不同的组合后,SSH 似乎处理所有配置文件,但只采用Port
指定的第一个值,根据手册页,这是预期的行为:
对于每个参数,将使用第一个获得的值
但手册页还指出
配置文件包含由“主机”规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。
所以我认为,如果不指定任何Port
值,默认端口就会改变仅有的在那些确实有价值的部分Port
。
Host
那么,除非指定了其他值,否则我该如何设置条目以使用端口 22?
谢谢!
答案1
由于使用了每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。
所以
Host *
Port 22
应移至末尾。
答案2
将“Host *”声明放在所有其他主机声明之后,以防止其覆盖其他主机声明。但实际上您根本不需要此声明,因为默认情况下 SSH 使用端口 22。