Reinicio de red a través de SSH


11

En el servidor A, quiero emitir los siguientes comandos al Servidor B a través de ssh.

service network stop
sleep 5
service network start

El problema es porque emití un 'stop' de red, entonces mi conexión ssh actual también se pierde. Por lo tanto, no puedo ejecutar los comandos siguientes (suspensión 5 e inicio de red de servicio). Tenga en cuenta que no puedo usar (reinicio de red de servicio).

¿Alguien tiene una solución / solución para esto?


55
¿Por qué no usarías la opción "reiniciar"? ¿Por qué parar por separado y luego comenzar?
SpacemanSpiff

Esta es la única solución que funciona con las versiones modernas de Debian y Ubuntu: serverfault.com/a/731120/10361, el enfoque de servicio se volvió "defectuoso" en ambas distribuciones en los últimos años.
sorin

Respuestas:


8

Si está haciendo esto de forma interactiva, ¿por qué no iniciar una screensesión? Se vería algo así:

screen

(comienza el shell scren)

service network restart

(La sesión SSH se desconecta, pero el reinicio de la red continúa en la sesión de pantalla)

(Espera unos segundos)

(SSH vuelve al host una vez que finaliza el reinicio)

screen -r

(Vuelva a conectarse a la pantalla y verifique si hay errores)

En mi humilde opinión, siempre da miedo reiniciar una interfaz de red de forma remota. ¿Qué sucede cuando no vuelve a subir? ¿Tiene una consola u otro medio en el host si sucede algo malo?


1
Siempre opero screencuando trabajo en máquinas remotas. En caso de desconexiones no planificadas, puede ser un salvavidas. También puede ser útil tener varios shells activos en la misma sesión. También te gustaría mirar tmux, no lo he usado yo mismo, pero algunos lo prefieren screeny su función principal proporciona los mismos beneficios.
David Spillett

Obsoleta: esto ya no funciona: Failed to restart network.service: Unit network.service failed to load: No such file or directory.Esto funciona: serverfault.com/a/731120/10361
Sorin

@sorin ¿Qué plataforma? Esto suponía una variante RedHat.
Corey S.

systemctl restart networkingno funcionó para mí por alguna razón en la tmuxsesión en Ubuntu Xenial. systemctl restart networktrabajó en CentOS 7 (OpenVZ) ni siquiera en tmux/ screensesión. Sin perder la conexión.
x-yuri

5

Los comandos exactos disponibles para hacer esto varían según la distribución de Linux. Una opción que es bastante estándar es programar y "en" el trabajo durante 5 segundos en el futuro para reiniciar la red. Otro es usar el nohupcomando.

echo "sleep 5; /etc/init.d/networking start" | at now
nohup sh -c 'sleep 5; /etc/init.d/networking start' &

Otras distribuciones tienen el comando daemon para convertir el programa resultante en un daemon que ya no está asociado con el shell.


2

Una manera muy simple de hacer esto es usando el operador y:

service network stop && sleep 5 && service network start

2
Prefiero detener la red de servicio; dormir 5; servicio de inicio de red. Si alguno de los comandos falla, ejecutará el resto de todos modos.
ghm1014

@ ghm1014 Sí, esa también es una muy buena forma alternativa. De hecho, eso es lo que normalmente uso.
Jordan S. Jones

1
¿Cuál es la ventaja sobre service network restart?
Caleb

Cuando lo hace, service network stopla interfaz se cae, bashrecibe SIGHUPy no se ejecutan otros comandos. ¿Me estoy perdiendo de algo?
x-yuri

1

¿Por qué no ponerlo en un script de shell y ejecutarlo a través de SSH?


Si lo pongo en un script, esto sucederá: en el Servidor A, ssh server_B "execute_script". ¿Pero aún no perderé mi conexión ssh de A a B? Espero que aún pueda preservar la conexión ssh ...
Carmen

1
No puede preservar la sesión SSH si está deteniendo la interfaz de red en un servidor.
Christopher Armstrong

entonces, parecería que mi sesión ssh se bloqueará mientras estoy ejecutando ese script de reinicio. ¿Hay alguna manera de fingir esto? P.ej. salir de la sesión ssh actual y volver a conectarse a ella?
Carmen

1
Sí, pantalla, como lo señala la respuesta de hoy.
mfinni

Sí, eso no funcionará. El "reinicio de la red de servicio" en realidad llama a un script de shell, pero internamente solo ejecuta stop y luego comienza. La sesión ssh se corta después de la parada y el inicio nunca ocurre. Screen or nohup es la respuesta. Tenga en cuenta que he hecho esto a través de la pantalla y en realidad conservó la sesión ssh existente para mí (solo un poco de retraso), pero no lo hará sin la pantalla. PELIGRO WILL ROBINSON: esta es una buena manera de perder el acceso al sistema remoto por completo (si pierde la conexión, sin depuración, solo está conectado).
Jared

1

Pruebe esto (tal vez instale cron si es necesario):

$ at now+5min
at> service network stop
at> sleep 5
at> service network start
at> [control-D]

Luego cierre sesión, espere 6 minutos y vuelva a iniciar sesión


1
El atplanificador no está en el paquete cron en la mayoría de las distribuciones, intente buscar un atpaquete directamente.
Caleb

1

Esto funciona con Debian y Ubuntu modernos, mientras que todas las otras respuestas no funcionarán.

screen
sudo ifdown --exclude=lo -a && sudo ifup --exclude=lo -a

Tenga en cuenta que puede llevar un poco recuperar la interfaz. En mi caso, unos 15 segundos, ya que tengo un vínculo.


0

Parece que quieres pantalla o tmux . Esto le permitirá preservar su sesión a través de la pérdida de una conexión de red. Son realmente bastante útiles, casi todas mis sesiones de terminal son a través de la pantalla.


0
#!/bin/sh

# CentOS Linux release 7.4.1708 (Core) 

# 1. restart the network service
# 2. take the NIC [ens32] down
# 3. bring the NIC [ens32] up

systemctl restart network \
  && ifdown ens32 \
  && ifup ens32
#!/bin/sh

# Linux far-seer-01 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux

/etc/init.d/networking restart \
    && ifdown eth0 \
    && ifup eth0

p.ej

[root@localhost tmp]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:74:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.224.129/24 brd 192.168.224.255 scope global dynamic ens32
       valid_lft 1796sec preferred_lft 1796sec
    inet6 fe80::f06e:8b57:23fc:b25/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost tmp]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@localhost tmp]# cat net.sh 
#!/bin/sh

# 1. restart the network service
# 2. take the NIC [ens32] down
# 3. bring the NIC [ens32] up

systemctl restart network \
  && ifdown ens32 \
  && ifup ens32
[root@localhost tmp]# sh net.sh 
Device 'ens32' successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/17)
$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ cat net.sh 
#!/bin/sh

# Linux far-seer-01 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux

/etc/init.d/networking restart \
    &&ifdown eth0 \
    && ifup eth0
$ sh net.sh 
[ ok ] Restarting networking (via systemctl): networking.service.
ifdown: interface eth0 not configured
Internet Systems Consortium DHCP Client 4.3.5
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:0c:29:8a:67:72
Sending on   LPF/eth0/00:0c:29:8a:67:72
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5
DHCPREQUEST of 192.168.224.128 on eth0 to 255.255.255.255 port 67
DHCPOFFER of 192.168.224.128 from 192.168.224.254
DHCPACK of 192.168.224.128 from 192.168.224.254
bound to 192.168.224.128 -- renewal in 847 seconds.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.