绕过 Cisco 终端服务器菜单

网络工程 思科 ssh
2021-07-12 22:58:32

配置中心的人员通过以下方式连接到设备:将它们放在管理机架上,然后通过一些 hwic/RJ45 反向 telnet 连接将它们插入管理交换机。当您远程进入管理交换机时,您会进入一个菜单控制台,您可以在其中输入一个数字并转发到相应的端口。作为一个只有几门三百级课程的实习生,这件事似乎有点神秘。

这些家伙坐在那里,将大量的 CLI 命令从记事本复制/粘贴到 SSH 终端中。人们一致认为应该有一种简单的方法来自动化这些任务——而且有!我发现 Paramiko/Netmiko 脚本或简短的 Ansible 任务似乎都是不错的选择。

问题是这些配置工具都假设你可以直接连接到想要的主机。

我无法从我的同事或谷歌那里得到很多关于这个终端服务器的直接答案。有传言说有人曾经以某种方式将端口和环回(例如:2003,1.1.1.1?)附加到 putty 中的 IP 地址 - 有人将网卡安装到路由器某处可以通过菜单转发请求,但是只有 telnet 请求。

这个终端服务器现在似乎并不流行,有没有人有过这些东西的经验?有没有办法形成一个 SSH 连接,该连接将透明地转发到那些 telnet 端口?


补充说明编辑

这种情况在这些临时机架上有点不寻常。鼓励我找到一种方法来自动化某些 CLI 输入,以解决工程师在 10 或 15 台设备上复制和粘贴相同命令时遇到的问题。工程师经常陷入困境,在这一步上浪费了大量时间。在这些临时机架上使用术语服务器是因为它最适合于广泛和随机的客户设备和它们所需的任务,尽管在许多情况下,相同的 CLI 命令序列已被使用数千次。

我开始只是编写一个简单的paramiko 脚本来导航术语,然后将给定文本文件中的行输入到指定端口。这有效,但仅适用于转储 conf-t 命令。文件传输和设备重新加载带来了严重的计时/排序挑战。意识到复杂性后,我专注于研究如何使实际工具 (ansible/netmiko) 与术语服务器一起使用,而不是将我自己的乏味实用程序组合在一起。

复杂的是关于终端服务器的信息很少,我模糊地意识到我应该只通过 SSH 连接到术语服务器,然后转发到设备中。我不应该直接 telnet 到端口 200N 上的术语服务器,因为对可能有权访问该网络不同部分的不同客户端的安全问题

3个回答

有没有人有这些事情的经验?

几个世纪,实际上。并且这种经验表明,不要对您知之甚少(或一无所知)的事情单独处理,尤其是当它们是 (a)工作和 (b)工作多年的系统时在宣布它废话之前,先忍受它几年。

我称之为“新生儿综合症”;这家伙进来了,从第一天起就宣布所有东西都是过时的、低效的垃圾,并开始用当前这一代“闪亮”的东西来取代它。(红宝石、云等)我已经看过数百次了。我见过几家公司的坦克。都是因为新人不知道他一心要更换的流程;他们不知道我们为什么按照我们做事的方式做事的历史

您所描述的是一个古老的网络串行控制台这是一个终端服务器,它提供对自身没有网络访问权限的设备的 telnet 访问——要么是因为它没有网络功能,要么尚未配置您的终端服务器设置了一个菜单界面来选择端口,最有可能简化过程。必须知道特定端口的 IP 和/或 TCP 端口可能会令人困惑。

您对使用 SSH 的需求只会使自动化/脚本化访问的尝试复杂化。(比简单地打开一个套接字还有很多工作要做。)

我怀疑您是否有权访问或授权进行更改,但以下是我们用于管理对电信设备的访问的方式:

ip alias 10.200.5.201 3007
!
line 33 41
 session-timeout 30  output
 location DEX-600E Switch Port
 flush-at-activation
 refuse-message ^C
All XXX switch ports are in use. Please try again later.
^C
 modem DTR-active
 rotary 7
 no exec
 transport input telnet
 autohangup
 stopbits 1
 flowcontrol software out

第一行映射 10.200.5.201 以连接到端口 3007 -- 3000(telnet) + 旋转。也可以连接到路由器的 IP:3007 并获得相同的结果。所述line配置程序9个端口组中(“旋转”)。

回应 Ricky Beam 的回应......

对于古老的串行控制台,有很多话要说。对于这种情况,我见过的最成功和最强大的方法是从主配置 Unix 机器使用netcat使用各种 Bourne shell 脚本进行反向 telnet expect配置都在 git/whatever 的版本控制之下。正如 Ron Trunk 所建议的,最小的引导配置然后网络负载有时是个好主意。

为了直接回答有关菜单的问题,反向 telnet 到 Cisco 设备上特定传出串行线路的常用方法是连接到端口 2000 + N,其中 N 是传出线路号。这通常设置为直接带您出去,没有任何菜单。在 Lantronix 设备上,它是 10000 + N。

最重要的是让它健壮、有文档记录并且非常非常不经常更改。如果我负责它,我根本不想使用任何聪明的东西,我想删除所有可能的依赖项。由于在串行设置上浪费了太多时间,我什至坚持所有控制台都保持默认的 9600 波特。为什么?因此,没有人会花一秒钟的时间想知道这些设置是什么。

特别是 SSH,可能会发生一些令人惊讶的变化:当工人的笔记本电脑“升级”时,我的公司最近(暂时)失去了对某些远程设备的控制。负责 Open SSH 的人已经下令,某些加密设置现在不安全,默认情况下无法使用。花了一些时间才可以更改适当的设置,以便这些人可以再次通过 ssh 连接到远程设备。

典型的网络设备(交换机/路由器/防火墙等)与外界有以下连接:

         +------
         | "Console" Port (RS-232/USB/Bluetooth/...)
  +------o------+
  |             |
  |             o-------->
  |             |
  |             o--------> Network Interfaces
  |             |
  |             o-------->
  |             |
  +------o------+
         | "Management"
         | Interface (ethernet)
         +---------------

“控制台”端口是一个串行接口,可用于在设备启动后立即监视和操作设备,即在操作系统启动并启动 IP/TCP/SSH 协议栈之前。(如果您在没有键盘和显示器的台式计算机上安装了 Linux,您可能熟悉将初始用户界面(例如 GRUB 菜单)重定向到 COM 端口的过程;网络设备上的控制台端口执行类似的作用)。

即使在网络设备启动后(因此可以通过直接 telnet/ssh 访问),许多安装中的常见做法是继续通过控制台端口管理设备。我不会讨论这种做法的利弊;可以说事情就是这样。这是完成此操作的典型方式:

               "Terminal Server"
            +----------------------+
            |                 COM1 +-----------> console port of device A
            |                      |
            |                 COM2 +-----------> console port of device B
            |                      |
   ---------+ Ethernet        COM3 +-----------> console port of device C
            | 192.0.2.11           |
            |                 COM4 +-----------> console port of device D
            |                      |
            |                 COM5 +-----------> console port of device E
            +----------------------+

AFAIK,有两种方法可以使用此设置来访问网络设备的控制台端口:

(1) Telnet 或 SSH 到设备(使用 IP 地址,上例中的 192.0.2.11)。此时,您会看到一个菜单,选择适当的选项(例如,'a' 代表设备 A,'b' 代表设备 B 等等),您就可以连接到适当的设备。从你的问题来看,这就是你所拥有的。

(2) 向特定的 TCP 端口发起 telnet 连接将直接带您到设备的控制台端口。例如,从您的膝上型计算机调用“telnet 192.0.2.11 2001”将直接带您到设备 A 的控制台端口,“telnet 192.0.2.11 2002”将带您到设备 B 的控制台端口,依此类推。

根据您的终端服务器型号,必须使用一种或另一种方法。也许这两种方法都有效,你必须检查一下。

满足您的自动化要求:当然,从记事本粘贴配置的做法很丑陋;毕竟这是2018年。我认为您有以下选择:

(a) 开始使设备可通过 IP(通过管理端口或网络端口)访问。然后您可以使用 SSH,从而使用 netmiko,从而使用 ansible。但是要知道,这不是一个微不足道的变化。您必须设置一个“管理网络”并在所有设备上进行配置更改以允许访问。还有一些安全方面需要考虑。

(b) 以某种方式“说服”netmiko 软件在终端服务器上工作。我有一个模糊的回忆,netmiko 确实支持上述方法 (2),即 telnet 到终端服务器上的特定 TCP 端口,将您带到特定设备的控制台端口。不过,您必须检查文档。