You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SSH登录机器后,如何用Bash提取网络设备配置文件中的主机名?

从网络设备配置文件提取主机名的Bash方法

既然你已经通过SSH登录到目标机器了,那咱们得根据不同网络设备的配置格式来针对性处理——毕竟不同厂商的配置文件里,主机名的定义方式差别还挺大的。下面我给你整理了通用方法和几种主流设备的具体操作:

通用模糊匹配(不确定配置格式时用)

如果不知道配置文件的具体格式,先做两步:

  1. 找到可能的配置文件位置:
    # 搜索系统里带config的文件,缩小范围(忽略权限报错)
    find / -name "*config*" -type f 2>/dev/null
    
  2. 用关键字匹配常见的主机名定义(比如hostnamesysname),同时过滤掉注释行(假设注释以#!开头):
    grep -E "(hostname|sysname)" /path/to/your/config/file | grep -v "^[#!]"
    
    如果要只提取主机名字段,用awkcut进一步处理:
    # 提取关键字后面的内容(适用于类似"hostname Router-01"的格式)
    grep -E "^hostname" /path/to/config | awk '{print $2}'
    # 或者用cut分割字符串
    grep -E "^hostname" /path/to/config | cut -d' ' -f2
    

主流厂商设备的具体操作

1. Cisco IOS/IOS-XE 设备

Cisco配置里主机名通常是hostname <设备名>格式:

  • 如果已经把show running-config的输出存成了文件(比如run-config.txt):
    grep "^hostname" run-config.txt | awk '{print $2}'
    
  • 直接在设备SSH会话中提取:
    show running-config | include ^hostname | awk '{print $2}'
    

2. Juniper Junos 设备

Junos的主机名定义是system host-name <设备名>(新版本)或sysname <设备名>(老版本):

  • 从配置文件提取:
    grep -E "(system host-name|sysname)" /config/juniper.conf | awk '{print $NF}'
    
  • 直接在设备中执行命令提取:
    show configuration system host-name | awk '{print $NF}'
    

3. 华为/H3C 设备

这类设备的主机名定义是sysname <设备名>

  • 从配置文件提取:
    grep "^sysname" /path/to/config | awk '{print $2}'
    
  • 直接在设备SSH会话中提取:
    display current-configuration | include ^sysname | awk '{print $2}'
    

4. Linux/OpenWrt 类网络设备

  • 大部分Linux系统的主机名直接存在/etc/hostname里,直接查看即可:
    cat /etc/hostname
    
  • OpenWrt的配置在/etc/config/system里,格式为option hostname '<设备名>',提取命令:
    grep "option hostname" /etc/config/system | cut -d"'" -f2
    

小技巧

如果不确定配置文件里的关键字,先快速浏览文件前几十行找线索:

head -50 /path/to/config/file

如果有多个匹配结果,用uniq去重:

grep -E "(hostname|sysname)" config.txt | awk '{print $NF}' | uniq

内容的提问来源于stack exchange,提问作者MoreScratch

火山引擎 最新活动