【问题标题】:.ssh/known-host file setup when using tunneling使用隧道时的 .ssh/known-host 文件设置
【发布时间】:2014-03-26 11:19:07
【问题描述】:

我有一个名为tnl 的脚本,用于帮助\设置和通过ssh 使用隧道。它会自动配置网关,然后确定我的程序应该使用哪些端口。在我的配置文件中,我可能有:

gateway: -system dmgwy01 -start 2000 -background
system:  -system foo01
system:  -system foo02
system:  -system foo03

当我运行命令时:

$ tnl start dmgwy01

这将使用以下端口开始我的隧道:

 ssh -N -c 3des dmgwy01 -L 2000/foo01/22 -L 2001/foo02/22 -L 2002/foo03/22

请注意,我不必为各个系统分配端口。这是由我的脚本自动完成的。

现在,我可以通过以下方式启动隧道:

$ tnl ssh foo01

效果很好。直到我更改我的配置文件并添加一个新系统:

gateway: -system dmgwy01 -start 2000 -background
system:  -system bar01
system:  -system foo01
system:  -system foo02
system:  -system foo03

现在,隧道是这样开始的:

 ssh -N -c 3des dmgwy01 -L 2000/bar01/22 -L 2001/foo01/22 -L 2002/foo02/22 -L 2003/foo03/22

请注意,各种系统的端口编号已更改。没关系,我真的不在乎实际的端口号。但是,现在当我使用隧道时,我得到:

$ tnl ssh bar01               
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx...
Please contact your system administrator.
Add correct host key in $HOME/.ssh/known_hosts to get rid of this message.
Offending RSA key in $HOME/.ssh/known_hosts:1
RSA host key for [localhost]:2000 has changed and you have requested strict checking.
Host key verification failed.

我已将此追溯到我的 ~/.ssh/known_hosts 文件。当我进行原始设置时,~/.ssh/known_hosts 是这样设置的:

[localhost]:2000 ssh-rsa (Fingerprint for f0001)
[localhost]:2001 ssh-rsa (Fingerprint for foo02)
[localhost]:2002 ssh-rsa (Fingerprint for f0003)

现在,[localhost]:2000bar01 而不是 foo01,所以它们的指纹当然不同。我在尝试登录foo01foo02 时也会遇到同样的问题,因为它们的端口号已更改,而且它们的指纹也不匹配。

有没有办法解决这个问题?是否可以强制我的.known_hosts 使用系统名称而不是端口号?是否有可能以某种方式将 note 添加到我的 .known_hosts 文件中,它将主机名映射到主机名,并允许我将主机名重新映射到以前的端口?

我可以通过关闭StrictHostKeyChecking 来解决这个问题,但这并不一定能解决问题。当我更改配置并重新计算主机密钥时,我可以简单地编辑我的known_hosts,但我试图让事情变得简单。

有什么建议吗?

【问题讨论】:

    标签: linux unix ssh


    【解决方案1】:

    鉴于您的脚本tnl 已经整理出本地端口号和要转发到的主机名称之间的映射。修改known_hosts文件,让同一个本地端口映射到同一个主机,这不仅仅是一小步——known_hosts中的每一行都包含这些信息。

    【讨论】:

    • 我正在考虑使用known_hosts 来帮助进行端口映射。如果foo01 映射到端口 2002,即使在系统配置更改后,我也会以这种方式重新映射它。但是,known_hosts 不包含任何系统名称——只是端口映射。我只看到[localhost]:2002 和主机的指纹。没有办法知道那是foo02 还是foo01。我可以在 known_host 文件中添加注释并嵌入机器名称或 IP 地址吗?
    猜你喜欢
    • 2021-04-13
    • 2014-09-25
    • 2011-01-15
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2018-02-15
    • 2011-02-07
    相关资源
    最近更新 更多