You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中替换SSH配置指定Host对应的HostName IP

解决SSH配置中指定Host的HostName IP替换问题

方法1:使用sed命令(适合快速命令行操作)

直接匹配目标Host对应的配置区块,替换其中的HostName IP:

# Linux环境
sed -i '/^Host my_host_2$/,/^Host\|$/ s/\(HostName \)\([0-9.]\+\)/\14.3.2.1/' ~/.ssh/config

# macOS环境(sed参数略有不同)
sed -i '' '/^Host my_host_2$/,/^Host\|$/ s/\(HostName \)\([0-9.]\+\)/\14.3.2.1/' ~/.ssh/config
  • /^Host my_host_2$/,/^Host\|$/:锁定从Host my_host_2行开始,到下一个Host行或文件末尾的配置区块
  • s/\(HostName \)\([0-9.]\+\)/\14.3.2.1/:在区块内匹配HostName 后的IP段,替换为目标IP4.3.2.1
  • -i:直接修改原文件(macOS需加空参数-i ''避免生成备份文件)

方法2:使用awk脚本(逻辑更清晰,适合复杂配置)

通过跟踪当前Host名称,精准替换目标条目:

awk -v target_host="my_host_2" -v new_ip="4.3.2.1" '
/^Host / {
    current_host = substr($0, 6)
}
/^HostName / {
    if (current_host == target_host) {
        print "HostName " new_ip
        next
    }
}
1' ~/.ssh/config > temp_config && mv temp_config ~/.ssh/config
  • 用-v定义变量target_host(要修改的Host名)和new_ip(目标IP)
  • 遇到Host开头的行,提取并记录当前Host名称
  • 遇到HostName开头的行,判断当前Host是否为目标Host,是则输出新配置,否则保留原行
  • 最后的1表示输出所有未匹配处理的行
  • 通过临时文件中转,避免直接修改原文件导致的配置损坏

方法3:GUI编辑器多行正则替换(比如VS Code)

开启编辑器的多行模式和点匹配换行选项后,使用以下正则:

  • 查找:(Host my_host_2\n.*?HostName )\d+\.\d+\.\d+\.\d+
  • 替换:$14.3.2.1

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:01