대상 컴퓨터의 백그라운드에서 명령을 실행하도록 SSH 가져 오기

StackOverflow https://stackoverflow.com/questions/29142

  •  09-06-2019
  •  | 
  •  

문제

이것은 방법에 대한 후속 질문입니다.쉘 스크립트에서 ssh를 사용합니까? 질문.해당 시스템의 백그라운드에서 실행되는 원격 시스템에서 명령을 실행하려면 ssh 명령을 반환하려면 어떻게해야합니까?명령 끝에 앰퍼샌드 (&) 만 포함하려고하면 중단됩니다.명령의 정확한 형식은 다음과 같습니다. 라코 디스

아이디어가 있습니까?한 가지 주목할 점은 대상 컴퓨터에 로그인하면 항상 텍스트 배너가 생성되고 SSH 키가 설정되어있어 비밀번호가 필요하지 않습니다.

도움이 되었습니까?

해결책

1 년 전에 작성한 프로그램에서이 문제가 발생했습니다. 답이 다소 복잡하다는 것이 밝혀졌습니다. nohup 의 위키 백과 문서에 설명 된대로 nohup과 출력 리디렉션을 사용해야합니다., 편의를 위해 여기에 복사했습니다. <인용구>

Nohuping 백그라운드 작업은 SSH를 통해 로그인 할 때 유용한 예, 백그라운드 작업으로 인해 경주로 인해 로그 아웃시 멈춤 조건 [2].이 문제는 또한 세 가지 모두를 리디렉션하여 극복 I / O 스트림 : 라코 디스

다른 팁

이것은 나를 위해 가장 깨끗한 방법이었습니다 .- 라코 디스

이후 실행되는 유일한 것은 원격 시스템의 실제 명령입니다.

FD 리디렉션

출력은 stderr 및 stdout을 모두 / dev / null로 리디렉션하고 &>/dev/null 또는 >/dev/null 2>/dev/null의 동의어 인 >/dev/null 2>&1로 리디렉션되어야합니다.

낙원

가장 좋은 방법은 command가 무엇이든간에 sh -c '( ( command ) & )'를 사용하는 것입니다. 라코 디스

노웁 셸

nohup을 직접 사용하여 셸을 시작할 수도 있습니다. 라코 디스

멋진 출시

또 다른 트릭은 nice를 사용하여 명령 / 셸을 실행하는 것입니다. 라코 디스

잘라내어 붙여 넣을 수있는 실제 예를 보여 드리고자합니다. 라코 디스

연결을 유지하지 않거나 유지할 수없는 경우 화면 을 사용할 수 있습니다., 설치 권한이있는 경우 라코 디스

스크린 세션을 분리하려면 : ctrl-a d

스크린 세션을 나열하려면 : 라코 디스

세션을 다시 연결하려면 : 라코 디스

화면은 각 세션 내에 여러 개의 셸을 만들 수도 있습니다. tmux 를 사용하여 유사한 효과를 얻을 수 있습니다. 라코 디스

tmux 세션을 분리하려면 : ctrl-b d

스크린 세션을 나열하려면 : 라코 디스

세션을 다시 연결하려면 : 라코 디스

기본 tmux 제어 키인 ' ctrl-b '는 사용하기 다소 어렵지만 시도 할 수있는 tmux와 함께 제공되는 몇 가지 tmux 구성 예가 있습니다.

가장 빠르고 쉬운 방법은 'at'명령을 사용하는 것입니다. <인용구>

ssh user @ target "현재 -f /home/foo.sh"

원하는 것을 얻으려면이 두 가지 답변을 결합해야한다고 생각합니다.세미콜론과 함께 nohup을 사용하고 전체를 따옴표로 묶으면 다음과 같은 결과가 나타납니다. 라코 디스

나에게 맞는 것 같습니다.nohup을 사용하면 실행할 명령에 &를 추가 할 필요가 없습니다.또한 명령의 출력을 읽을 필요가 없으면 다음을 사용할 수 있습니다. 라코 디스

모든 출력을 / dev / null로 리디렉션합니다.

이것은 몇 번이나 저에게 효과적이었습니다. 라코 디스

사실, 복잡한 원격 시스템에서 명령을 실행해야 할 때마다 명령을 대상 시스템의 스크립트에 넣고 ssh를 사용하여 해당 스크립트를 실행하는 것을 좋아합니다.

예 : 라코 디스

그런 다음 소스 컴퓨터에서이 명령을 실행합니다. 라코 디스

나는 똑같은 일을하려고했지만, 자바에서하려고했던 복잡성이 더해졌습니다.그래서 자바를 실행하는 한 컴퓨터에서 다른 컴퓨터의 백그라운드 (nohup 사용)에서 스크립트를 실행하려고했습니다.

명령 줄에서 다음과 같이 작동합니다. (호스트에 ssh하는 데 필요하지 않은 경우 "-i keyFile"이 필요하지 않을 수 있습니다) 라코 디스

명령 줄에서 "-c"뒤에 하나의 인수가 있으며 모두 따옴표로 묶여 있습니다.그러나 다른 쪽에서 작동하려면 여전히 따옴표가 필요하므로 이스케이프 된 따옴표를 그 안에 넣어야했습니다.

자바에서 작동 한 것은 다음과 같습니다. 라코 디스

이 작업을 수행하는 데 약간의 시행 착오가 필요했지만 지금은 잘 작동하는 것 같습니다.

이렇게 할 수 있습니다 ... 라코 디스

다음과 같은 tmux new -d <shell cmd> 구문을 사용하는 원격 tmux 세션을 갖는 것이 매우 편리해 보였습니다. 라코 디스

이렇게하면 elsewhere 호스트에서 새 세션이 시작되고 로컬 컴퓨터의 ssh 명령이 거의 즉시 셸로 돌아갑니다.그런 다음 원격 호스트에 ssh하고 해당 세션에 대한 tmux attach를 생성 할 수 있습니다.로컬 tmux 실행에 대해서는 아무것도없고 원격에서만 실행됩니다!

또한 작업이 완료된 후에도 세션이 지속되도록하려면 명령 뒤에 셸 실행기를 추가하기 만하면되지만 따옴표로 묶는 것을 잊지 마십시오. 라코 디스

이것이 필요한 것 같습니다. 처음에는 컴퓨터에 sshpass를 설치해야합니다. 그런 다음 자신 만의 스크립트를 작성할 수 있습니다. 라코 디스

먼저 다음 절차를 따르십시오.

A 사용자 a로 로그인하고 한 쌍의 인증 키를 생성합니다.암호를 입력하지 마십시오. 라코 디스

이제 ssh를 사용하여 B에서 사용자 b로 ~ / .ssh 디렉토리를 만듭니다. (이 디렉토리가 이미 존재할 수 있습니다. 괜찮습니다) : 라코 디스

마지막으로 a의 새 공개 키를 b @ B : .ssh / authorized_keys에 추가하고 마지막으로 b의 비밀번호를 입력합니다. 라코 디스

이제부터 비밀번호없이 A에서 b로 B에 로그인 할 수 있습니다. 라코 디스

그러면 비밀번호를 입력하지 않아도 작동합니다.

ssh b @ B "cd / some / directory; 프로그램 실행 &"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top