Redémarrage du réseau via SSH

11

Sur le serveur A, je souhaite émettre les commandes suivantes vers le serveur B via ssh.

service network stop
sleep 5
service network start

Le problème est dû au fait que j'ai émis un «arrêt» du réseau, puis ma connexion ssh actuelle est également perdue. Par conséquent, je ne peux pas exécuter les commandes suivantes (sommeil 5 et démarrage du réseau de service). Notez que je ne peux pas utiliser (redémarrage du réseau de service).

Quelqu'un at-il une solution de contournement / solution pour cela?

Carmen
la source
5
pourquoi ne pas utiliser simplement l'option "redémarrer"? pourquoi s'arrêter séparément, puis recommencer?
SpacemanSpiff
C'est la seule solution qui fonctionne avec les versions Debian et Ubuntu modernes: serverfault.com/a/731120/10361 l'approche de service est devenue "défectueuse" dans les deux distributions ces dernières années.
sorin

Réponses:

8

Si vous le faites de manière interactive, pourquoi ne pas démarrer une screensession? Cela ressemblerait à quelque chose comme ceci:

screen

(shell scren commence)

service network restart

(La session SSH se déconnecte, mais le redémarrage du réseau se poursuit dans la session écran)

(Attendez quelques secondes)

(SSH de retour dans l'hôte une fois le redémarrage terminé)

screen -r

(Se reconnecter à l'écran et vérifier les erreurs)

À mon humble avis, il est toujours effrayant de redémarrer une interface réseau à distance. Que se passe-t-il quand il ne revient pas? Avez-vous une console ou d'autres moyens dans l'hôte en cas de problème?

Corey S.
la source
1
J'exécute toujours screenlorsque je travaille sur des machines distantes. En cas de déconnexions imprévues, cela peut vous sauver la vie. Avoir également plusieurs shells actifs dans la même session peut être pratique. Vous aimerez peut-être aussi regarder tmuxaussi, je ne l'ai pas utilisé moi-même mais certains le préfèrent screenet sa fonction principale offre les mêmes avantages.
David Spillett
Obsolète: cela ne fonctionne plus: Failed to restart network.service: Unit network.service failed to load: No such file or directory.cela fonctionne: serverfault.com/a/731120/10361
sorin
@sorin Quelle plateforme? Cela supposait une variante de RedHat.
Corey S.
systemctl restart networkingn'a pas fonctionné pour moi pour une raison quelconque en tmuxsession sur Ubuntu Xenial. systemctl restart networktravaillé sur CentOS 7 (OpenVZ) même pas dans tmux/ screensession. Sans perdre la connexion.
x-yuri
5

Les commandes exactes disponibles pour ce faire varient en fonction de la distribution Linux. L'option qui est assez standard consiste à planifier et à "au" travail pendant 5 secondes à l'avenir pour redémarrer le réseau. Une autre consiste à utiliser la nohupcommande.

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

D'autres distributions ont la commande daemon pour transformer le programme résultant en un démon qui n'est plus associé au shell.

Seth Robertson
la source
2

Un moyen très simple de le faire est d'utiliser l'opérateur et:

service network stop && sleep 5 && service network start
Jordan S. Jones
la source
2
Je préfère l'arrêt du réseau de service; dormir 5; démarrage du réseau de service. Si l'une des commandes échoue, elle exécutera le reste de toute façon.
ghm1014
@ ghm1014 Aye, c'est aussi une très bonne forme alternative. En fait, c'est ce que j'utilise généralement.
Jordan
1
Quel est l'avantage service network restart?
Caleb
Lorsque vous faites cela, service network stopl'interface descend, bashreçoit SIGHUPet aucune autre commande n'est exécutée. Suis-je en train de manquer quelque chose?
x-yuri
1

Pourquoi ne pas le mettre dans un script shell et l'exécuter via SSH?

Christopher Armstrong
la source
Si je le mets dans un script, cela se produira: sur le serveur A, ssh server_B "execute_script". Mais ne perdrai-je toujours pas ma connexion ssh de A à B? J'espère que je peux encore conserver la connexion ssh ...
Carmen
1
Vous ne pouvez pas conserver la session SSH si vous arrêtez l'interface réseau sur un serveur.
Christopher Armstrong
ainsi, il semblerait que ma session ssh se bloque pendant que j'exécute ce script de redémarrage. Y a-t-il un moyen de faire semblant? Par exemple. sortir de la session ssh en cours et s'y reconnecter?
Carmen
1
Oui, écran, comme indiqué dans la réponse d'aujourd'hui.
mfinni
Ouais, ça ne marchera pas. Le "redémarrage du réseau de service" appelle en fait un script shell, mais en interne, il s'exécute simplement stop puis start. La session ssh est interrompue après l'arrêt et le démarrage ne se produit jamais. Écran ou nohup est la réponse. Remarque, je l'ai fait via l'écran et cela a en fait préservé la session ssh existante pour moi (juste un peu de retard), mais cela ne se fera pas sans écran. DANGER WILL ROBINSON: c'est un bon moyen de perdre complètement l'accès au système distant (si vous perdez la connexion, pas de débogage, vous êtes juste arrosé).
Jared
1

Essayez ceci (peut-être en installant cron si nécessaire):

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

Déconnectez-vous, attendez 6 min et reconnectez-vous

RainerFromReading
la source
1
L' atordonnanceur n'est pas dans le package cron sur la plupart des distributions, essayez de rechercher un atpackage directement.
Caleb
1

Cela fonctionne avec Debian et Ubuntu modernes, tandis que toutes les autres réponses ne fonctionneront pas.

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

N'oubliez pas qu'il peut falloir un peu de temps pour récupérer l'interface. Dans mon cas, environ ~ 15 secondes car j'ai un lien.

Sorin
la source
0

Il semble que vous souhaitiez un écran ou un tmux . Ceux-ci vous permettront de préserver votre session grâce à la perte d'une connexion réseau. Ils sont vraiment très utiles, presque toutes mes sessions terminales se font par écran.

Jeff Tang
la source
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

par exemple

[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.
ROY
la source