据我所知,为了在不重新启动的情况下将 espn0 更改为 eth0,我可以使用脚本执行以下操作:
#!/bin/bash
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up
它在普通桌面上完美运行。但对于ssh
只有当我运行上述脚本时才能访问的服务器,
从第一个声明开始:
ip link set espn0 down
这已经导致服务器互联网连接中断,我与 SSH 登录的连接也断开了。
那么,如何在不重新启动且不断开互联网连接的情况下将 espn0 接口更改为 eth0,尤其是我仍在连接 SSH?是否可以 ?
答案1
该问题在地址为 192.0.2.2/24、网关为 192.0.2.1 的系统上出现(如果没有变得无法访问):
# ip route
default via 192.0.2.1 dev espn0
192.0.2.0/24 dev espn0 proto kernel scope link src 192.0.2.2
# ip link set espn0 down
# ip link set espn0 name eth0
# ip link set eth0 up
# ip route
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
虽然 LAN 路由是由内核从地址自动添加回来的,因为它是路由proto kernel
,但默认路由没有这样的机制。如果没有默认路由,连接就会丢失。
我建议使用一个很少使用的功能ip route
: ip route save
/ ip route restore
:
ip route save
将路由表信息保存到 stdout此命令的行为类似于 ip Route show,只不过输出是适合传递到 ip Route Restore 的原始数据。
和:
ip route restore
从 stdin 恢复路由表信息该命令期望读取从 ip Route save 返回的数据流。它将尝试将路由表信息完全恢复为保存时的状态,因此必须首先完成流中信息的任何转换(例如设备索引)。任何现有路线均保持不变。表中已存在的数据流中指定的任何路由都将被忽略。
这在这里可行,因为内部路由是使用接口索引而不是接口名称来处理(并在此处保存)的。重命名接口不会更改其索引。
使用脚本:
ip route save default > /tmp/mysaveddefaultroute
ip link set espn0 down
ip link set espn0 name eth0
ip link set eth0 up
ip route restore < /tmp/mysaveddefaultroute
最后:
# ip route
default via 192.0.2.1 dev eth0
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.2
注意事项:
- 要检查的防火墙特定规则
- 如果脚本输出任何内容,它可能会因为无法输出而卡住。然后需要在后台运行脚本
- 系统可能还有其他路线需要处理。适应
- 它可能正在使用 DHCP。如果使用 DHCP,则在不重新配置 DHCP 的情况下将无法正常工作,例如,一旦发生某些 DHCP 事件,它将突然变得无法访问
答案2
也许通过 nohup 运行脚本并将其放在后台,这样当连接断开时,脚本将继续运行。
例如 nohup ./myscript &