我有两台机器位于防火墙后面,ssh 端口转发到 2201 和 2202。
当我
ssh host -p 2201
它询问我是否信任该机器,我回答是,然后它被添加到 ~/.ssh/known_hosts
然后我
ssh host -p 2202
它不让我这样做,因为这个 IP 已经有了一个条目~/.ssh/known_host:1
(当我启动时文件是空的,所以第 1 行是上次 ssh 运行添加的)。
这发生在 CentOS 5.4 上。
在其他发行版上(我尝试过 Arch),似乎 ssh 也将 known_hosts 与端口匹配,因此我可以在同一主机/ip 上为多个端口获取多个指纹而不会出现任何问题。
我怎样才能在 CentOS 上获得同样的行为?
我找不到任何东西man ssh_config
(或者至少在没有禁用指纹检查的情况下找不到)。
我找到了一个临时解决方案。如果known_hosts
文件中有多个针对同一 IP 的条目,它会先检查所有条目,然后再断定哪里出了问题。但我真的不希望这是解决方案。
答案1
CentOS 5 附带的 OpenSSH 版本不支持 中的端口号known_hosts
。如果您希望此功能正常工作,则需要构建并安装较新版本。
答案2
~/.ssh/config
:
主机 foohost-2201 主机名 foohost.domain.tld # 这应该符合 OpenSSH 5 中使用的格式。 HostkeyAlias“[foohost.domain.tld]:2201” 用户用户名 端口 2201
认真地升级。
答案3
如果您的 openssh 客户端不支持基于主机+端口的条目,请使用此项:
指令 'GlobalKnownHostsFile' 可以误用指向您两台防火墙保护的机器(这里是 Alice 和 Bob)各自的不同文件。但是,这两个文件必须提前准备好 alice 或 bob 的正确主机密钥,因为在接受未知密钥时不会写入这些密钥。
设置起来并不是很有趣,但一旦完成它就可以工作了。
我之前的解决方法是“StrictHostKeyChecking no”,它不允许 ssh-agent 转发密钥,也不允许转发端口(使用时被 openssh 阻止)。
直到最近,我的 .ssh/config 看起来是这样的:
Host hoppingstation
Hostname loginhost.somewhere.net
User me
LocalForward 2201 alice.somewhere.net:22
LocalForward 2202 bob.somewhere.net:22
Host alice
Hostname localhost
Port 2201
User root
ForwardAgent yes
GlobalKnownHostsFile /home/me/.ssh/known_hosts_alice
Host bob
Hostname localhost
Port 2202
User root
ForwardAgent yes
GlobalKnownHostsFile /home/me/.ssh/known_hosts_bob
答案4
我的解决方案;将详细的主机信息添加到~/.ssh/config
:
Host <someidentifier>
Hostname ip.add.re.ss
StrictHostKeyChecking no
User username
Port 2201
Host <someotheridentifier>
Hostname ip.add.re.ss
StrictHostKeyChecking no
User username
Port 2202
ssh someidentifier
那么您甚至无需提供-p
等等就可以做到。