ssh를 사용하여 원격 Unix 시스템에서 명령을 실행하고 명령이 완료되기 전에 종료하려면 어떻게해야합니까?


17

ssh를 사용하여 Unix 머신에서 명령을 실행하고 명령이 완료되기 전에 종료하려면 어떻게해야합니까?

예를 들어 내가 입력하면

ssh localhost 'sleep 60 &'

수면이 백그라운드에서 실행 되더라도 수면이 완료 될 때까지 ssh가 터미널에서 정지합니다.


&따옴표 외부를 원할 것입니다 .
브래드 길버트

1
아니요, 전체 키트와 국수를 백그라운드에 넣고 비밀번호를 입력 할 수 없습니다.
Richard Hoskins

답변:


19

SSH에는 -f 스위치가있어 클라이언트에서 nohup을 사용하는 것과 정확히 동일하지만 ssh가 암호를 요구할 수 있습니다. 다음과 같이 사용하십시오.

ssh localhost -f 'command'

그러나 : SSH는 여전히 백그라운드에서 작동하므로 서버의 명령이 완료되기 전에 클라이언트를 종료하면 중단됩니다. 명령을 실행 한 후 ssh 연결을 닫으려면 서버 측에서 screen을 사용할 수 있습니다.

ssh localhost -f 'screen -d -m sleep 60'

'ssh remotemachine -n'long running command> withremoteredirects 2> & 1 </ dev / null & '를 실행하고 클라이언트가 종료되면 명령이 완료됩니까?
Richard Hoskins

아파 익 번호 ssh 연결이 끊어지면 ssh 데몬이 모든 터미널을 "내부"ssh로 종료해야합니다. 터미널은 명령을 시작한 이후 부모 프로세스가 종료되었으므로 종료됩니다. 그러나 시도해 볼 가치가 있습니다.)
Martin

서버 측의 '스크린'대신 '노 허프'는 어떻습니까?
Richard Hoskins

@ 브래드 길버트 몇 가지를 생각할 수 있지만 공통적으로없는 한 가지는 모든 POSIX 시스템에서 '스크린'을 사용할 수 없다는 것입니다.
Richard Hoskins


6

nohup, stdout / stderr 리디렉션을 사용하고 백그라운드에서 명령을 실행하십시오.

 nohup ssh localhost 'sleep 60' >/dev/null 2>/dev/null &

편집 : 또는 ssh의 -f 매개 변수를 사용하는 것이 더 좋습니다.

ssh -f localhost 'sleep 60'

두 리디렉션을와 결합 할 수 &>/dev/null있습니다.
브래드 길버트

@BradGilbert이 구문은 POSIX 호환이 아닙니다. 문자 몇 개를 절약하기 위해 호환성을 희생한다고 주장하기는 어렵습니다.
tripleee

2

또는을 사용하여 로그인 한 후 나중에 다시 방문하여 진행 상황 또는 출력을 확인하려면 ssh시작 screen하십시오.


개인적으로 구성하기 쉬운 "tmux"를 사용할 수도 있습니다. 두 응용 프로그램은 각각 장단점이있는 것과 거의 같습니다.
mzuther
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.