我有一个脚本,允许我将 SSH 连接从我的机器上的端口转发到远程主机,从而访问只能从该主机访问的另一个远程主机:
ssh -o ExitOnForwardFailure=yes -f -N -L <forward_port>:<database_url>:22 <user>@<remote_host_id> -i <private_key>;
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking no" <user>@127.0.0.1 -p <forward_port>;
我将此脚本与多个远程主机/数据库一起使用,并且我想始终使用相同的forward_port
,因此我添加了选项-o "StrictHostKeyChecking no"
和-o "UserKnownHostsFile=/dev/null"
;如果没有这些,则会出现此消息:IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
这安全吗?我认为这基本上意味着信任127.0.0.1
最有可能不会被欺骗。
答案1
实际上,我们可以重新表述您的问题并询问:是否有可能将这种情况转变为攻击,如果您不禁用主机密钥检查,这是不可能的。
直接的想法是,攻击者将隧道端重新路由到其他地方,并利用您在那里执行基于密钥的身份验证这一事实。因为这是您的客户端唯一不会注意到的事情 - 因为收到的主机密钥未经验证。
但是,如果我们假设您只对这些服务器使用给定的私钥,那么攻击者就无法通过将隧道端重新路由到其他地方而获得任何好处 - 因为那里从未接受密钥。好吧,最坏的情况下,他会让您在列表中的另一台服务器上进行身份验证,而不是您期望的服务器,但在这种情况下,您无论如何都会将他带到您最初请求的服务器,这看起来并没有太大的不同 - 我的意思是您必须对此进行评估,但这似乎是一个微小的差异。
所以从我目前看到的情况来看,我认为关闭它所带来的风险是可以接受的。
[但请记住,不要将该钥匙用于其他用途!]
答案2
虽然我将@fratester 的答案标记为已接受(因为它是问题的正确答案),但我可以以本机方式完成这个 ssh 隧道操作,这种方式更简单、更安全,而不必担心我担心的安全问题。
正如@Bob评论的那样,检查此链接https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts。