我有这个配置~/.ssh/config
:
Host *.myhost.com
User awwuser
IdentityFile my-keys/myhost/id_dsa
问题是,我为不同的主机设置了 2 个不同的私钥,并且该主机有 2 个不同的用户,因此我不想每次通过 ssh 选项都把它们记下来。我发现,我可以创建一个配置文件,它将自动设置要使用的用户名和私钥。
据我从文档中理解,我所做的一切都是正确的。
但这个配置似乎根本不起作用。当我这样做时,ssh subdomain.myhost.com
它会尝试使用当前用户名而不是配置中指定的用户名进行连接。当我通过 ssh 选项指定用户名时,它看不到正确的身份文件。所以我的配置似乎根本不起作用。
请指教。
PS 我正在使用 open ssh 6.0
答案1
首先,您可能要记住,您的 SSH 配置选项是从上到下读取的。
根据您的设置,您的配置设置默认值中可能还有一个全局部分。有点像这样。
Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
Protocol 2
AddressFamily inet
SendEnv LANG LC_*
HashKnownHosts no
GSSAPIAuthentication no
如果该部分位于您的部分之前,则将使用该部分的设置*
。通常,您希望按从最具体到最不具体的设置顺序排列 SSH 配置文件。
就像这样。
host fully.qualitified.tld
...
host *.example.com
...
host *
您还必须记住,名称匹配与您在命令行中输入的确切名称相匹配。它不会考虑您可能获得的 DNS 搜索,因为您的搜索路径中有 myhost.com。
因此,如果您运行命令ssh foo
,并且恰好设置了 DNS,将 foo 解析为 foo.example.com,则 SSH 客户端将不会使用来自的任何设置host foo.example.com
。您还可以通过在配置文件中添加多个别名来让生活更轻松,就像这样host foo.example.com foo.example foo
。
既然您提到您有多个密钥。请记住,您可能最好在客户端上启动 SSH 代理并添加所有密钥。然后让 SSH 自动协商要使用哪个密钥。您还可以IdentityFile
在一个host *
部分中有多个选项。SSH 将一次尝试所有选项。
答案2
谢谢大家的关注。我发现问题在于主机名中的域是错误的,并且我的 IdentityFile 路径不是绝对路径。在我设置了正确的主机名和完整路径后,一切开始正常工作。