我正在测试一个安全设置,通过设置网关服务器来锁定对某些面向外部的服务器的访问。这意味着现在每个人都必须先 ssh 到网关服务器,然后才能 ssh 到外部服务器。
到目前为止,设置已让用户以公共 (admin) 用户身份使用自己的 ssh 密钥登录网关服务器,并禁用密码。然后以该公共用户身份 ssh 连接到外部服务器。
我正在寻找一种自动化初始 ssh 跳转的方法,以便用户可以输入ssh <external server>
并以某种方式为他们设置第一个 ssh(ssh 隧道/bash 别名?)。
如果可能的话,实现这一目标的最佳方法是什么?
答案1
油灰。
为了直接执行 ssh,您可以使用 vbs 运行以下命令:
昏暗的 ShellRun
设置 ShellRun = WScript.CreateObject("WScript.Shell")
ShellRun.Run """C:\Program Files\PuTTY\putty.exe"" -ssh 用户名@server -i ssh.key", 1
如果用户名与 Windows 登录名相同,则可以使用 %USERNAME%
如果您想要设置一些与隧道相关的内容(例如,如果您需要通过网关建立隧道),它看起来会像这样:
昏暗的 ShellRun
设置 ShellRun = WScript.CreateObject("WScript.Shell")
ShellRun.Run """C:\Program Files\PuTTY\putty.exe"" -ssh 用户名@server -i ssh.key -L 22:xxx.xxx.xxx.xxx:22", 1
由于不知道您是如何配置所有东西的,我无法给出确切的答案。但是您可以设置 SSH 隧道进入网关,然后您可以在隧道上运行 SSH 到达您需要到达的地方。如果您愿意,您实际上可以将所有内容放在一个脚本中。
我曾经遇到过类似这样的情况:我们的主要 SSH 服务器位于路由器的访问列表中,但我的计算机不在,因此我必须先通过 SSH 服务器建立隧道,然后再通过 SSH 连接到路由器。路由器将其视为来自第一个 SSH 服务器的 SSH,而不是来自我的计算机的 SSH。
答案2
如果不进行一些相当复杂的基础设施变更,以某种方式将所有请求转发到网关并让网关服务器感知哪个服务器是用于访问的将会很困难。
也许网关服务器的 /etc/bashrc 中放置的脚本适合于此?例如,用户将使用 ssh ,然后一旦登录,脚本将向他们显示一个小菜单,类似于“按 1 访问服务器 X。按 2 访问服务器 Y”,等等。