SSH를 통한 네트워크 재시작


11

서버 A에서 ssh를 통해 서버 B에 다음 명령을 실행하고 싶습니다.

service network stop
sleep 5
service network start

문제는 네트워크 '중지'를 발행했기 때문에 현재 ssh 연결도 손실되기 때문입니다. 따라서 후속 명령을 실행할 수 없습니다 (절전 5 및 서비스 네트워크 시작). (서비스 네트워크 다시 시작)을 사용할 수 없습니다.

누구든지 이것에 대한 해결 방법 / 솔루션이 있습니까?


5
왜 "다시 시작"옵션을 사용하지 않습니까? 왜 별도로 멈추었다가 다시 시작해야합니까?
SpacemanSpiff

이 현대적인 데비안과 우분투 버전에서 작동하는 유일한 솔루션입니다 : serverfault.com/a/731120/10361이 서비스 접근 방식은 지난 몇 년 동안 두 배포판에 "결함"이되었다.
sorin

답변:


8

대화식으로 이것을하고 있다면, 왜 screen세션을 시작하지 않습니까? 다음과 같이 보일 것입니다.

screen

(스크 라이닝 쉘 시작)

service network restart

(SSH 세션 연결이 끊어 지지만 화면 세션에서 네트워크 재시작이 계속됨)

(몇 초 기다립니다)

(다시 시작한 후 호스트로 다시 SSH 연결)

screen -r

(화면에 다시 연결하여 오류 확인)

IMHO, 네트워크 인터페이스를 원격으로 다시 시작하는 것은 항상 무섭습니다. 다시 나타나지 않으면 어떻게됩니까? 문제가 발생하면 호스트에 콘솔이나 다른 수단이 있습니까?


1
나는 screen원격 컴퓨터에서 작업 할 때 항상 작동 합니다. 계획되지 않은 연결이 끊어지면 생명을 구할 수 있습니다. 또한 같은 세션에 여러 개의 활성 쉘이 있으면 편리 할 수 ​​있습니다. 당신은 또한 그것을보고 싶을 수도 있습니다 tmux. 나는 그것을 직접 사용하지 않았지만 일부는 그것을 선호 screen하고 핵심 기능은 동일한 이점을 제공합니다.
David Spillett

기한이 지난 : 더 이상 작동하지 않습니다 : Failed to restart network.service: Unit network.service failed to load: No such file or directory.이 작동합니다 : serverfault.com/a/731120/10361
sorin

@sorin 어느 플랫폼? 이것은 RedHat 변형을 가정 한 것입니다.
Corey S.

systemctl restart networkingtmuxUbuntu Xenial 세션에서 어떤 이유로 든 작동하지 않았습니다 . systemctl restart network심지어에서 CentOS는 7 (오픈 VZ)에 근무 tmux/ screen세션. 연결을 끊지 않고.
x-yuri

5

이를 수행 할 수있는 정확한 명령은 Linux 배포판에 따라 다릅니다. 꽤 표준적인 옵션은 네트워킹을 다시 시작하기 위해 향후 5 초 동안 작업을 예약하고 "at"하는 것입니다. 다른 하나는 nohup명령 을 사용하는 것 입니다.

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

다른 배포판에는 결과 프로그램을 더 이상 쉘과 연관되지 않은 데몬으로 바꾸는 데몬 명령이 있습니다.


2

이를 수행하는 가장 간단한 방법은 and 연산자를 사용하는 것입니다.

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

2
서비스 네트워크 중지를 선호합니다. 수면 5; 서비스 네트워크 시작. 명령 중 하나라도 실패하면 나머지는 실행됩니다.
ghm1014

@ ghm1014 Aye, 그것은 또한 아주 좋은 대체 형식입니다. 사실, 그것은 내가 일반적으로 사용하는 것입니다.
Jordan S. Jones

1
장점은 무엇입니까 service network restart?
Caleb

당신이 할 때 service network stop인터페이스는, 아래로 도착 bash수신 SIGHUP하고, 다른 명령이 실행되지 얻을. 뭔가 빠졌습니까?
x-yuri

1

쉘 스크립트에 넣고 SSH를 통해 실행 해보십시오.


스크립트에 넣으면 서버 A에서 ssh server_B "execute_script"가 발생합니다. 그러나 여전히 A에서 B 로의 ssh 연결이 끊어지지 않습니까? 나는 여전히 ssh 연결을 유지할 수 있기를 바라고있다.
Carmen

1
서버에서 네트워크 인터페이스를 중지하면 SSH 세션을 보존 할 수 없습니다.
Christopher Armstrong

다시 시작 스크립트를 실행하는 동안 ssh 세션이 중단되는 것처럼 보입니다. 이것을 위조하는 방법이 있습니까? 예 : 현재 ssh 세션을 종료하고 다시 연결 하시겠습니까?
Carmen

1
예, 오늘의 답변에서 알 수 있듯이 스크린.
mfinni

예, 작동하지 않습니다. "서비스 네트워크 재시작"은 실제로 쉘 스크립트를 호출하지만 내부적으로는 중지 후 시작합니다. 중지 후 ssh 세션이 중단되고 시작이 발생하지 않습니다. 화면 또는 nohup이 답입니다. 참고로, 화면을 통해이 작업을 수행했으며 실제로 기존 ssh 세션을 유지했지만 약간의 지연이 있었지만 화면이 없으면 아닙니다. 위험 로빈슨 : 원격 시스템에 대한 액세스를 완전히 해제하는 좋은 방법입니다.
Jared

1

이것을 시도하십시오 (필요한 경우 cron 설치 가능).

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

그런 다음 로그 아웃하고 6 분 동안 기다렸다가 다시 로그인하십시오.


1
at스케줄러는 대부분의 배포판에 크론 패키지에없는,을 찾고 시도 at직접 패키지로 제공된다.
Caleb

1

이것은 현대 데비안 및 우분투에서 작동하지만 다른 모든 대답은 작동하지 않습니다.

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

인터페이스를 다시 가져 오는 데 약간의 시간이 걸릴 수 있습니다. 제 경우에는 약 15 초 정도의 시간이 소요됩니다.


0

screen 또는 tmux 중 하나를 원하는 것처럼 들립니다 . 네트워크 연결이 끊어지면 세션을 보존 할 수 있습니다. 그들은 매우 유용합니다. 거의 모든 터미널 세션은 화면을 통해 이루어집니다.


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

예 :

[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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.