有没有人完成对用户透明的SSH代理,但是他们路由到的最终主机是由以下任一项决定的:用户名,身份密钥,DNS主机名。 我猜DNS协议不可能使用DNS主机名,但可以使用身份密钥。
例如,我希望用户能够将所有SSH都连接到同一台计算机,但是它们最终位于不同的VPS节点上:ssh -i identity_rsa [email protected]。
这样做有几个非常好的function:
我担心这需要一个自定义(合法的)MitM SSH服务器,因为我想要一个可以进行SCP和代理转发的正常的端到端SSH连接。
代理转发可以使用强制命令吗? 我可以创build基于公钥的强制命令,调用SSH -A到内部主机?
我仍然怀疑这一点(见我早些时候的答案)。 你不能在这里做反向代理,除非你有一个能够理解如何执行sshauthentication的反向代理,即使这样,你的代理也是ssh连接的一个端点,所以它对于数据经过它是有知道的,用户连接的ssh密钥以及连接到它后面的服务器。 如果任何人都可以访问这个系统,那么最有可能的就是游戏背后的一切。
如果你准备让用户login两次,你可以避免一些风险,第二次连接通过第一次连接到堡垒主机,但你已经说过,这不是你所追求的。
所以,你真的需要locking你的堡垒主机。
你的堡垒主机需要有一堆用户帐户,每个用户帐户都有ssh私钥,在他们的.ssh文件夹中login到他们后面的主机。 他们也将持有用户login的公共密钥。
您需要确保用户不能在networking中运行任何东西,除了ssh之外的networking中的主机。 在ssh authorized_keys文件中设置ssh命令,使用公钥login会自动运行ssh命令连接到堡垒后面的主机。 请参阅man sshd的AUTHORIZED KEYS部分,特别是'command ='位。
我很难想出一个很好的理由去做你正在描述的事情。 即我想到的可能性大多是不可取的。
我build议你给出更多的背景知识,你要解决的根本问题是什么,而且答案可能会让你在一个完全不同的方向。
我的第一个build议是在堡垒主机上设置多个转发端口,每个转发端口都转发到另一台机器上的ssh。 如果您的用户将端口存储在.ssh / config文件或puttyconfiguration中,那么这不是一个重大的不便。
您可以在bastion主机上使用authorized_keys文件中指定的命令ssh帐户通过ssh连接到相应的主机。 你会得到两个sshlogin进程,这有点慢,但如果你使用ssh代理和代理转发,这不是太痛苦。 代理转发的意思是,如果堡垒主机被攻破,当时login的任何人的ssh密钥都可能被滥用,只要他们保持连接状态。
选项2更接近你所要求的,但选项1是更好的恕我直言。
请注意,选项2将受到Shell Shock bash攻击的影响。 我希望很久以前人们可以修补它,但是这是一个例子,说明如何终止在通过第二个ssh连接传递连接的主机上的ssh访问,这可能会使基于端口转发的解决scheme变得非常脆弱。