我有两台机器在防火墙后面,ssh端口转发到2201和2202。
当我
ssh host -p 2201
它询问我是否信任机器,我说是的,它被添加到〜/ .ssh / known_hosts
然后我
ssh host -p 2202
它不允许我,因为在~/.ssh/known_host:1有一个这个IP的入口~/.ssh/known_host:1 (我开始的时候这个文件是空的,所以第一行是前面ssh运行时添加的那个)。
这发生在CentOS 5.4上。
在其他的发行版(我试过Arch)看来,ssh也将known_hosts与端口匹配,所以我可以在同一台主机/ ip上为多个端口设置多个指纹,而不会出现任何问题。
我怎样才能得到CentOS的同样的行为?
我找不到任何man ssh_config (或至less不禁用指纹检查)。
我find了一个临时解决scheme。 如果known_hosts文件对于同一个IP有多个条目,它将在结束之前检查它们全部是错误的。 但我真的很讨厌这个解决scheme。
CentOS 5附带的OpenSSH版本不支持known_hosts端口号。 如果你想这个工作,你将需要build立和安装一个更新的版本。
~/.ssh/config :
主机foohost-2201
主机名foohost.domain.tld
#这应该符合OpenSSH 5中使用的格式。
HostkeyAlias“[foohost.domain.tld]:2201”
用户名称
港口2201
严重的是升级
如果您的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
我的解决办法 将详细的主机信息添加到~/.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等。