ssh 명령을 사용하여 재부팅을 실행 한 후 연결 종료


18

reboot -f유닉스 머신을 강제로 재부팅하기 위해 명령을 원격으로 사용하고 있습니다. 문제는 ssh 연결이 오랫동안 활성 상태로 유지되는 이유는 무엇입니까? 컴퓨터를 재부팅 한 직후 ssh 연결을 닫고 로컬 셸로 돌아가고 싶습니다. 어떻게해야합니까? -f플래그가없는 재부트 명령 은 작동하지 않습니다.


1
원격 연결을 종료하고 (Ctrl + D) 쉘 프롬프트를 보지 않고도 서버를 재부팅하도록 하시겠습니까?
gertvdijk

같은 명령으로 어떻게 할 수 있습니까?
coffeMug

2
다른 사람들에게도 도움이 될 수있는 해결책을 찾았습니다. ssh에 첨부 된 명령을 시작한 직후 다음 명령을 사용하여 연결을 닫았습니다. ssh host "호스트 시스템에서 실행하는 명령> / dev / null &"이 명령이 연결을 강제하는 이유를 완전히 이해하지 못합니다. 끝났지 만 적어도 그것은 나에게 도움이되었습니다. 누군가가 명령 출력을 / dev / null로 보내는 것을 이해하고 왜 ssh 연결을 종료하는지 이해한다면 설명 할 수 있다면 좋을 것입니다. :-)
coffeMug

ssh host "호스트 머신에서 실행하는 명령> / dev / null &"
coffeMug

1
이 질문에 대한 답은 아니지만 어쨌든 아는 것이 유용합니다. SSH 클라이언트에는 클라이언트를 죽이는 데 사용할 수있는 일련의 제어 문자가 있습니다. 제어 문자는 개행 직후에만 인식되므로를 눌러 시작하십시오 Enter. 그런 다음 예 ~.를 들어 세션을 종료합니다. Enter ~?다른 사람들의 목록을 위해.
Tom

답변:


22

reboot -f재부팅을 유발할 권한이 없으면 명령이 반환되지 않습니다. SSH 클라이언트가 발행되는 시점에서 SSH 클라이언트는 다음을 수행 할 수있는 작업을 기다리고 있습니다.

  • 표시 할 출력이 있거나 원격 명령이 완료된 경우와 같이주의가 필요한 일이 발생했음을 클라이언트에 알리는 SSH 서버.
  • 중계 할 신호와 같은 클라이언트 측의 일부 이벤트;
  • 클라이언트가 keepalive 메시지를 보내고 서버가 응답하지 않으면 연결을 닫도록 타이머가 작동합니다.

SSH 서버 프로세스가 종료되었으므로 타이머가 시작될 때까지 SSH 클라이언트가 종료되지 않습니다.

를 실행 ssh remotehost 'reboot -f >/dev/null &'하면 다음과 같은 결과가 발생합니다.

  1. 원격 쉘은 reboot백그라운드 에서 명령을 시작합니다 .
  2. 서버 측 쉘 명령이 종료되었고 표준 출력 열기를위한 파일 디스크립터를 보유하는 프로세스가 없으므로 SSH 서버가 연결을 닫습니다.
  3. reboot명령은 머신을 재부팅합니다.

그러나 이는 신뢰할 수 없습니다. 타이밍에 따라 3 단계는 2 단계 전에 발생할 수 있습니다. 타이머를 추가하면 가능성이 낮아집니다.

ssh remotehost '{ sleep 1; reboot -f; } >/dev/null &'

서버 쪽이 실행되도록 커밋 reboot됨을 확실히 확인하려면 클라이언트에게 커밋되었음을 알리기 전에 실제로 재부팅하지 않는지 확인하려면 서버에서 클라이언트로 이동하려면 추가 알림이 필요합니다. 이것은 SSH 연결을 통해 출력 될 수 있지만 복잡해집니다.


2
누구나 원격 호스트 내에서 이와 유사한 방법을 찾고있는 경우 (유사한 솔루션) : (sleep 1 && sudo reboot &) && exit. 괄호는 서브 프로세스를 생성하여 1 초간 기다린 다음 재부팅을 시작합니다. 그러나 호스트 프로세스는 즉시 ssh 세션을 종료합니다. 나는 쉘 전문가가 아니지만 이것은 지금까지 나를 위해 일했다.
Griddo

@Griddo 그것은 훌륭하고 깔끔한 해킹입니다. 나는 그것을 좋아한다. 공유해 주셔서 감사합니다!
Joshua Pinter

5

나는이 솔루션이 나를 위해 최선을 다한다는 것을 알았습니다.

다음 -o "ServerAliveInterval 2"과 같이 ssh명령 과 함께 사용하십시오 .

$ ssh -o "ServerAliveInterval 2" root@remotehost reboot

상기 옵션은 클라이언트 측이 2 초마다 보안 채널을 통해 서버를 찌르도록합니다. 결국 재부팅이 진행되면 응답이 중지되고 클라이언트가 연결을 끊습니다.


고마워 로마, 마술처럼 작동합니다! :)
stdcerr

3

일부 답변은 비슷했지만 정답은 다음과 같습니다.

ssh user@192.168.0.130 "nohup sudo reboot &>/dev/null & exit"

설명:

  • exit마지막 명령의 상태가 0 (성공)이되도록 마지막 명령으로 사용 하려고합니다 . 원하는 경우 수면을 추가 할 수 있지만 필요하지는 않습니다
  • 그렇지 않으면 서버가 연결을 닫고 오류가 발생하기 때문에 백그라운드에서 재부팅을 실행해야합니다. 여전히 대부분의 시스템에서 재부팅되지만 스크립트를 작성하는 경우 명령이 제대로 실행 되더라도 리턴 상태는 오류가 아닙니다 (0이 아님).
  • 는 AS 배경에서 실행하는 것은 충분하지 않습니다 stdin와는 stdout연결이 종료되지 않도록 여전히 SSH를 통해 가상 터미널로 연결되어 있습니다. SSH 세션을 종료하고 백그라운드에서 명령을 실행하려면 두 가지 추가 작업을 수행해야합니다.
    • 1) 당신은 리디렉션 할 필요가 stdoutstderr/dev/null그들이 SSH 세션을 보유하고있는 가상 터미널로 리디렉션되지 않도록. 이것이 &>/dev/null부분입니다.
    • 2) stdin읽을 수없는 파일로 동일한 방식 으로 리디렉션해야합니다 . 그것이 쉘 내장 기능 nohup입니다.

모든 방법으로 터미널에서 분리 된 백그라운드에서 실행중인 명령 만 사용하면 exit세션이 닫히고 가상 터미널에 stdin없거나 stdout남아 있기 때문에 SSH는 오류없이 연결을 종료합니다.


1

다음 명령을 사용합니다.

ssh -t <hostname> 'sudo shutdown --reboot 0 && exit'

이 작업은 다음과 같습니다.

  • 이 명령은 수행하지 않고 다음 순간에 시스템을 재부팅하도록 지시합니다.
  • SSH에서 깨끗하게 종료
  • sudo가 행복하고 제대로 실행될 수 있도록 SSH TTY를 전체 시간 동안 유지합니다.

0

다음을 시도 했습니까

# shutdown -r now

패스로 작업 한 일부 시스템에서 재부팅 명령에 문제가 있음을 발견했습니다. 그런 다음 다시 종료 맨 페이지에서 -f 플래그를 사용하여 재부팅하는 것과 동일한 작업을 찾을 수 없습니다.


1
예, 이상한 이유로 연결하려고하는 컴퓨터에서 종료가 작동하지 않습니다. 그래서 reboot -f를 사용하여 강제 종료하고 다시 시작하는 이유입니다.
coffeMug

0

다음 명령을 사용하여 ssh 세션을 종료하고 시스템을 재부팅하는 방법은 무엇입니까?

ssh login@host "reboot -f"

그런 다음 Ctrl + C를 눌러 ssh를 종료하십시오.


0

다른 사람들에게도 도움이 될 수있는 해결책을 찾았습니다. ssh에 연결된 명령을 시작한 직후 다음 명령을 사용하여 연결을 닫았습니다.

ssh host "command to run on the host machine > /dev/null &"

이 명령이 연결을 강제로 종료하는 이유를 정확히 이해하지 못했지만 적어도 도움이되었습니다. 누군가 그것이 왜 ssh 연결을 죽이는 지 이해한다면; 설명 해주십시오.


0

이것은 1 분 지연이 필요하지만 안정적으로 작동했으며 SSH 클라이언트 중단 문제를 해결합니다.

    $ sudo shutdown +1; logout

그러면 시스템 종료가 1 분 후에 예약되어 로그 아웃 및 SSH 종료 시간이 완료됩니다. 가능한 한 짧은 시간으로 대기 할 경우 대체 할 수있는 +1과를 HH:MM하루 빠르게 접근 시간을하지만 제대로 시간 까다로운 일이 될 수 있으며, 59 초 지연까지있을 수 있습니다.


0

내가 찾은 간단한 방법은 종료 및 재부팅을 백그라운드 작업 ( '&'사용)으로 명령하여 즉각적인 쉘 / 세션 종료와 함께 세션이 'nohup'으로 닫힐 때 닫히지 않도록 보호하는 것입니다.

nohup shutdown -r now & exit

이러한 방식으로 원격 시스템은 재부팅을 비동기 적으로 진행하는 동안 세션이 즉시 종료되므로 SSH 클라이언트가 정지되지 않습니다.


또는 시스템을 "shutdown -r now"로 대체하여 재부팅합니다. ...
MikeW

-2

이 명령을 시도하십시오 :

$ reboot -f && exit

2
불행히도 이것은 작동하지 않습니다.
coffeMug

1
@AKh_Sw "작동하지 않습니다"에만 적용하십시오.
gertvdijk

@AKh_Sw : '$'부호를 입력하면 작동하지 않습니다
tH0r

1
쓸모없는. 이것은와 정확히 동일합니다 reboot -f.
Gilles 'SO- 악마 중지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.