ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

IP地址自动修改实操过程及脚本

IP地址自动修改实操过程及脚本 一、任务概览项目 内容任务名称 任务1修改虚拟机IP地址任务目标 将虚拟机IP从 192.168.1.41 改为 192.168.1.228涉及系统/软件 Rocky Linux 8.6 虚拟机NetworkManager网络配置当前阶段 已完成二、环境信息2.1 本地环境项目 值操作系统 Windows工作目录 C:\Users\Administrator\Doubao\chats\2026-08-29\new-chatShell PowerShellSSH工具 Posh-SSH 3.2.7PowerShell模块本次调试中安装Python 3.13.13pip可用但paramiko安装失败原因待查2.2 远程/目标环境项目 值原IP 192.168.1.41新IP 192.168.1.228子网掩码 /24 (255.255.255.0)网关 192.168.1.1DNS1 223.5.5.5DNS2 114.114.114.114操作系统 Rocky Linux 8.6 (Green Obsidian)内核版本 4.18.0-372.9.1.el8.x86_64网卡名 ens33MAC地址 00:0c:29:35:4e:c2网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33网络管理 NetworkManagernmcli登录凭据 root / root1234三、调试日志按时间正序记录每条包含时间、操作、命令、输出/现象、分析、结论。2026-08-29 初始化操作创建调试工作文档确立记录规范。说明本文档将持续追加所有调试过程的重要内容。2026-08-29 任务1修改虚拟机IP地址阶段1本地SSH工具准备问题本地Windows环境没有ssh命令也没有plink、sshpass等工具。ssh -V 21→ ssh : The term ssh is not recognized...尝试1用pip安装paramikoPython SSH库失败。pip install paramiko -q→ 超时/失败exit code -1​pip install paramiko -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com→ 仍然失败exit code -1尝试2用PowerShell安装Posh-SSH模块首次失败。Install-Module -Name Posh-SSH -Force -Scope CurrentUser→ Install-NuGetClientBinaries : Exception calling ShouldContinue with 2 argument(s):Windows PowerShell is in NonInteractive mode. Read and Prompt functionality is not available.根因NonInteractive模式下NuGet提供者安装需要交互确认。解决方案先强制安装NuGet提供者再信任PSGallery最后安装模块。Install-PackageProvider -Name NuGet -Force -Scope CurrentUserSet-PSRepository -Name PSGallery -InstallationPolicy TrustedInstall-Module -Name Posh-SSH -Force -Scope CurrentUser -AllowClobber结果Posh-SSH 3.2.7 安装成功。阶段2连接目标主机并查看当前配置连通性测试Test-NetConnection -ComputerName 192.168.1.41 -Port 22→ TcpTestSucceeded : True建立SSH连接Posh-SSH方式$password ConvertTo-SecureString root1234 -AsPlainText -Force$cred New-Object System.Management.Automation.PSCredential(root, $password)$session New-SSHSession -ComputerName 192.168.1.41 -Credential $cred -AcceptKey查看系统版本cat /etc/os-release→ NAMERocky Linux→ VERSION8.6 (Green Obsidian)→ VERSION_ID8.6查看内核版本uname -r→ 4.18.0-372.9.1.el8.x86_64查看当前IP地址ip addr show→ 2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP→ link/ether 00:0c:29:35:4e:c2 brd ff:ff:ff:ff:ff:ff→ inet 192.168.1.41/24 brd 192.168.1.255 scope global noprefixroute ens33查看路由表ip route show→ default via 192.168.1.1 dev ens33 proto static metric 100→ 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.41 metric 100查看网卡配置文件cat /etc/sysconfig/network-scripts/ifcfg-ens33→ TYPEEthernet→ PROXY_METHODnone→ BROWSER_ONLYno→ BOOTPROTOnone→ DEFROUTEyes→ IPV4_FAILURE_FATALyes→ IPV6INITyes→ IPV6_AUTOCONFyes→ IPV6_DEFROUTEyes→ IPV6_FAILURE_FATALno→ NAMEens33→ UUID8806b1bd-6076-4e7f-9f49-6c30131e039f→ DEVICEens33→ ONBOOTyes→ IPADDR192.168.1.41→ PREFIX24→ GATEWAY192.168.1.1→ DNS1223.5.5.5→ DNS2114.114.114.114NetworkManager状态nmcli connection show→ NAME UUID TYPE DEVICE→ ens33 8806b1bd-6076-4e7f-9f49-6c30131e039f ethernet ens33​nmcli device status→ DEVICE TYPE STATE CONNECTION→ ens33 ethernet 已连接 ens33→ lo loopback 未托管 --阶段3修改IP配置步骤1备份配置文件cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak_20260829备份文件ifcfg-ens33.bak_20260829333字节步骤2修改IP地址sed -i s/^IPADDR192\.168\.1\.41$/IPADDR192.168.1.228/ /etc/sysconfig/network-scripts/ifcfg-ens33验证修改结果grep -E ^(IPADDR|PREFIX|GATEWAY|BOOTPROTO|ONBOOT) /etc/sysconfig/network-scripts/ifcfg-ens33→ BOOTPROTOnone→ ONBOOTyes→ IPADDR192.168.1.228→ PREFIX24→ GATEWAY192.168.1.1步骤3后台重启网络连接由于修改IP后当前SSH连接会断开采用nohup后台执行方式nohup bash -c sleep 2; nmcli connection down ens33; sleep 1; nmcli connection up ens33 /tmp/network_restart.log 21 注意上述命令中PID输出显示为$!而非实际PID是PowerShell转义问题但命令本身已正确投递到远程执行。阶段4验证新IP现象网络重启后新旧IP均无法连接约1-2分钟。Test-NetConnection 192.168.1.41 -Port 22 → FalseTest-NetConnection 192.168.1.228 -Port 22 → Falseping 192.168.1.228 → False分析NetworkManager重启连接过程中网络短暂中断属于正常现象。用户在虚拟机控制台确认网络已恢复后重新连接。用新IP重新连接$session New-SSHSession -ComputerName 192.168.1.228 -Credential $cred -AcceptKey -ConnectionTimeout 15→ 连接成功SessionId: 0验证当前IPip addr show ens33 | grep inet → inet 192.168.1.228/24 brd 192.168.1.255 scope global noprefixroute ens33验证配置文件grep -E ^(IPADDR|PREFIX|GATEWAY|BOOTPROTO|ONBOOT|DNS) /etc/sysconfig/network-scripts/ifcfg-ens33→ BOOTPROTOnone→ ONBOOTyes→ IPADDR192.168.1.228→ PREFIX24→ GATEWAY192.168.1.1→ DNS1223.5.5.5→ DNS2114.114.114.114验证路由表ip route show→ default via 192.168.1.1 dev ens33 proto static metric 100→ 192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.228 metric 100验证网络连通性ping网关ping -c 3 -W 2 192.168.1.1→ 3 packets transmitted, 3 received, 0% packet loss, time 2004ms→ rtt min/avg/max/mdev 2.004/2.568/3.602/0.734 ms结论IP修改成功网络正常任务完成。四、问题与解决方案汇总编号 问题标题 报错关键词 根因 解决方案 关联日志1 本地无SSH客户端 ssh : The term ssh is not recognized Windows未安装OpenSSH客户端 安装Posh-SSH PowerShell模块 阶段12 pip安装paramiko失败 exit code -1超时 网络环境限制具体原因待查 改用Posh-SSH模块 阶段13 Posh-SSH安装失败首次 NonInteractive mode. Read and Prompt functionality is not available NuGet提供者安装需要交互确认 先Install-PackageProvider -Name NuGet -Force再信任PSGallery最后安装模块 阶段14 网络重启后短暂断连 新旧IP均无法连接 NetworkManager重启连接过程中网络中断 等待1-2分钟后自动恢复或在虚拟机控制台确认 阶段4五、常用命令速查5.1 Posh-SSHPowerShell SSH客户端# 建立凭证$password ConvertTo-SecureString 密码 -AsPlainText -Force$cred New-Object System.Management.Automation.PSCredential(用户名, $password)​# 建立SSH连接$session New-SSHSession -ComputerName IP -Credential $cred -AcceptKey​# 执行命令Invoke-SSHCommand -SessionId $session.SessionId -Command 命令​# 查看所有会话Get-SSHSession​# 移除会话Get-SSHSession | Remove-SSHSession5.2 Linux网络配置Rocky/RHEL/CentOS# 查看IP地址ip addr showip addr show ens33​# 查看路由表ip route show​# 查看网卡配置文件cat /etc/sysconfig/network-scripts/ifcfg-ens33​# 查看NetworkManager连接nmcli connection shownmcli device status​# 修改配置文件中的IPsed -i s/^IPADDR旧IP$/IPADDR新IP/ /etc/sysconfig/network-scripts/ifcfg-ens33​# 重启网络连接nmcli connection down ens33nmcli connection up ens33​# 测试网络连通性ping -c 3 -W 2 网关IP5.3 后台执行网络重启避免SSH断开中断nohup bash -c sleep 2; nmcli connection down ens33; sleep 1; nmcli connection up ens33 /tmp/restart.log 21 六、参考资料序号 资料名称 链接/来源 备注1 Posh-SSH模块 PowerShell Gallery 跨平台SSH PowerShell模块2 Rocky Linux网络配置 Rocky Linux官方文档 NetworkManager与ifcfg文件七、经验与教训Windows环境SSH工具选型当系统没有内置ssh客户端时Posh-SSH是一个可靠的PowerShell原生方案无需额外安装exe。安装时需先处理NuGet提供者的交互确认问题。修改远程主机IP的注意事项修改IP后当前SSH连接必然断开必须采用后台执行nohup 方式重启网络否则命令可能在连接断开时被中断。网络重启后会有1-2分钟的断连窗口属正常现象不要急于判定失败。建议在虚拟机控制台旁有人值守或提前准备好控制台访问方式。配置文件备份修改任何系统配置文件前必须先备份命名包含日期便于回滚。本次备份文件ifcfg-ens33.bak_20260829。sed修改配置的正则写法使用^IPADDR旧IP$精确匹配整行避免误改其他包含该字符串的行。IP中的点号需要转义为\.。验证要全面IP修改后不能只看ip addr还需验证配置文件持久化、路由表、网关连通性确保重启后配置依然有效。附录AIP 修改自动化脚本脚本文件change_ip.sh功能自动化修改 RHEL/CentOS/Rocky 系列 Linux 的静态 IP 地址包含参数校验、配置备份、修改、重启、回滚提示。使用方法chmod x change_ip.sh./change_ip.sh 网卡名 新IP 子网前缀 网关​# 示例./change_ip.sh ens33 192.168.1.228 24 192.168.1.1脚本特性参数数量与格式校验IP、网关正则匹配root 权限检查网卡存在性检查配置文件自动备份含时间戳自动补全缺失的配置项IPADDR/PREFIX/GATEWAY/BOOTPROTO/ONBOOT后台重启网络避免 SSH 断开中断命令完整日志记录回滚命令提示完整脚本内容#!/bin/bash## 脚本名称change_ip.sh# 功能描述自动化修改 LinuxRHEL/CentOS/Rocky 系列静态 IP 地址# 适用系统Rocky Linux 8.x / CentOS 7/8 / RHEL 7/8# 网络管理NetworkManagernmcli ifcfg 配置文件# 创建日期2026-08-29# 使用方式# chmod x change_ip.sh# ./change_ip.sh 网卡名 新IP 子网前缀 网关# 示例# ./change_ip.sh ens33 192.168.1.228 24 192.168.1.1#​set -euo pipefail​# ---------- 参数检查 ----------if [ $# -ne 4 ]; thenecho echo 用法: $0 网卡名 新IP 子网前缀 网关echo 示例: $0 ens33 192.168.1.228 24 192.168.1.1echo exit 1fi​# ---------- 变量定义 ----------IFACE$1NEW_IP$2PREFIX$3GATEWAY$4CONFIG_FILE/etc/sysconfig/network-scripts/ifcfg-${IFACE}BACKUP_FILE${CONFIG_FILE}.bak_$(date %Y%m%d_%H%M%S)LOG_FILE/tmp/change_ip_$(date %Y%m%d_%H%M%S).log​# ---------- 颜色输出 ----------RED\033[0;31mGREEN\033[0;32mYELLOW\033[1;33mNC\033[0m​info() { echo -e ${GREEN}[INFO]${NC} $*; }warn() { echo -e ${YELLOW}[WARN]${NC} $*; }error() { echo -e ${RED}[ERROR]${NC} $*; }​# ---------- 权限检查 ----------if [ $(id -u) -ne 0 ]; thenerror 此脚本必须以 root 身份运行exit 1fi​# ---------- 网卡存在性检查 ----------if ! ip link show $IFACE /dev/null; thenerror 网卡 $IFACE 不存在echo 可用网卡列表ip -o link show | awk -F: {print $2}exit 1fi​# ---------- 配置文件存在性检查 ----------if [ ! -f $CONFIG_FILE ]; thenerror 配置文件 $CONFIG_FILE 不存在exit 1fi​# ---------- IP 格式校验 ----------if ! echo $NEW_IP | grep -qE ^([0-9]{1,3}\.){3}[0-9]{1,3}$; thenerror IP 地址格式不正确: $NEW_IPexit 1fi​if ! echo $GATEWAY | grep -qE ^([0-9]{1,3}\.){3}[0-9]{1,3}$; thenerror 网关地址格式不正确: $GATEWAYexit 1fi​# ---------- 获取当前IP ----------CURRENT_IP$(ip -4 addr show $IFACE | grep -oP (?inet\s)\d(\.\d){3} || echo 未知)​info info 网卡: $IFACEinfo 当前IP: $CURRENT_IPinfo 新IP: $NEW_IP/$PREFIXinfo 网关: $GATEWAYinfo 配置文件: $CONFIG_FILEinfo 备份文件: $BACKUP_FILEinfo 日志文件: $LOG_FILEinfo ​# ---------- 步骤1备份配置文件 ----------info [1/5] 备份配置文件...cp $CONFIG_FILE $BACKUP_FILEinfo 备份完成: $BACKUP_FILE​# ---------- 步骤2修改配置文件 ----------info [2/5] 修改配置文件中的 IP 地址...​if grep -q ^IPADDR $CONFIG_FILE; thensed -i s/^IPADDR.*$/IPADDR${NEW_IP}/ $CONFIG_FILEelseecho IPADDR${NEW_IP} $CONFIG_FILEwarn 配置文件中未找到 IPADDR已追加fi​if grep -q ^PREFIX $CONFIG_FILE; thensed -i s/^PREFIX.*$/PREFIX${PREFIX}/ $CONFIG_FILEelseecho PREFIX${PREFIX} $CONFIG_FILEwarn 配置文件中未找到 PREFIX已追加fi​if grep -q ^GATEWAY $CONFIG_FILE; thensed -i s/^GATEWAY.*$/GATEWAY${GATEWAY}/ $CONFIG_FILEelseecho GATEWAY${GATEWAY} $CONFIG_FILEwarn 配置文件中未找到 GATEWAY已追加fi​if grep -q ^BOOTPROTO $CONFIG_FILE; thensed -i s/^BOOTPROTO.*$/BOOTPROTOnone/ $CONFIG_FILEelseecho BOOTPROTOnone $CONFIG_FILEfi​if grep -q ^ONBOOT $CONFIG_FILE; thensed -i s/^ONBOOT.*$/ONBOOTyes/ $CONFIG_FILEelseecho ONBOOTyes $CONFIG_FILEfi​info 配置文件修改完成info 修改后关键配置grep -E ^(IPADDR|PREFIX|GATEWAY|BOOTPROTO|ONBOOT|DNS) $CONFIG_FILE | sed s/^/ /​# ---------- 步骤3验证配置文件语法 ----------info [3/5] 验证配置文件...if grep -q IPADDR${NEW_IP} $CONFIG_FILE; theninfo 配置文件中 IPADDR 验证通过elseerror 配置文件中 IPADDR 验证失败请检查exit 1fi​# ---------- 步骤4重启网络连接 ----------info [4/5] 重启网络连接...warn 注意网络重启后当前 SSH 连接可能会断开warn 将采用后台方式执行日志写入: $LOG_FILE​nohup bash -c echo 网络重启开始: \$(date) $LOG_FILEsleep 2echo --- 执行 nmcli connection down $IFACE --- $LOG_FILEnmcli connection down $IFACE $LOG_FILE 21sleep 1echo --- 执行 nmcli connection up $IFACE --- $LOG_FILEnmcli connection up $IFACE $LOG_FILE 21echo 网络重启结束: \$(date) $LOG_FILE /dev/null 21 ​RESTART_PID$!info 网络重启命令已后台执行PID: $RESTART_PIDinfo 请等待 10-30 秒后使用新 IP $NEW_IP 重新连接​# ---------- 步骤5输出后续操作提示 ----------info [5/5] 操作完成info info 后续验证命令用新IP连接后执行info ip addr show $IFACEinfo ip route showinfo ping -c 3 $GATEWAYinfo cat $LOG_FILEinfo info 如需回滚执行info cp $BACKUP_FILE $CONFIG_FILEinfo nmcli connection down $IFACE nmcli connection up $IFACEinfo ​exit 0附录B记录规范命令原文留存所有执行的关键命令完整复制不省略参数。报错原文留存报错信息不 paraphrase保留原始输出。时间戳精确到分钟便于回溯。根因与方案分开写先写分析过程再写最终方案。验证结果必记解决方案是否生效用什么方式验证的。未解决的问题明确标注不隐瞒标注「待跟进」。
返回列表