代理SSH隐藏端点

有没有人完成对用户透明的SSH代理,但是他们路由到的最终主机是由以下任一项决定的:用户名,身份密钥,DNS主机名。 我猜DNS协议不可能使用DNS主机名,但可以使用身份密钥。

例如,我希望用户能够将所有SSH都连接到同一台计算机,但是它们最终位于不同的VPS节点上:ssh -i identity_rsa [email protected]

这样做有几个非常好的function:

  1. RSA主机密钥是相同的,不pipe你使用什么VPS进入SSH。
  2. 主机名可以是相同的,或(可疑的)它可以路由子域名。 我不确定这是否在协议中,或只使用IP地址连接到TCP套接字。
  3. 客户端的零configuration(代理命令,多个ssh隧道等)
  4. 所有stream量都通过网关进行传输。

我担心这需要一个自定义(合法的)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 ='位。

  • 保持最低限度的可以做任何事情的用户数量,而不是在ssh命令之后。 也许只是根访问。 也许一个pipe理员用户或两个。
  • 确保用户不能将参数添加到ssh命令。
  • 没有密码访问。 仅SSH密钥。
  • 禁用AllowTcpForwarding,PermitTunnel,X11Forwarding
  • 如果您正在设置SSH代理转发,请非常小心。 如果不需要,禁用。
  • 考虑设置每个用户的chroot目录。

我很难想出一个很好的理由去做你正在描述的事情。 即我想到的可能性大多是不可取的。

我build议你给出更多的背景知识,你要解决的根本问题是什么,而且答案可能会让你在一个完全不同的方向。

根据更多信息:

  1. 我的第一个build议是在堡垒主机上设置多个转发端口,每个转发端口都转发到另一台机器上的ssh。 如果您的用户将端口存储在.ssh / config文件或puttyconfiguration中,那么这不是一个重大的不便。

  2. 您可以在bastion主机上使用authorized_keys文件中指定的命令ssh帐户通过ssh连接到相应的主机。 你会得到两个sshlogin进程,这有点慢,但如果你使用ssh代理和代理转发,这不是太痛苦。 代理转发的意思是,如果堡垒主机被攻破,当时login的任何人的ssh密钥都可能被滥用,只要他们保持连接状态。

选项2更接近你所要求的,但选项1是更好的恕我直言。

NB(稍后添加)

请注意,选项2将受到Shell Shock bash攻击的影响。 我希望很久以前人们可以修补它,但是这是一个例子,说明如何终止在通过第二个ssh连接传递连接的主机上的ssh访问,这可能会使基于端口转发的解决scheme变得非常脆弱。