SSH를 통해 원격으로 화면 세션을 시작하고 즉시 SSH 세션을 닫습니다.

SSH를 통해 원격으로 화면 세션을 시작하고 즉시 SSH 세션을 닫습니다.

내 목표는 서버에 원격으로 SSH를 통해 접속하고, 화면을 시작하고, 스크립트를 시작하고, 스크립트를 실행한 다음 화면에서 내 Python 스크립트를 실행하는 동안 SSH 세션을 종료하는 것입니다. 이것이 내가 가진 것입니다:

ssh -t myuser@hostname screen python somepath.py -s 'potato'

문제는 실행 후 수동으로 Ctrl+A+D를 수행하고 SSH 세션을 직접 종료해야 한다는 것입니다. 사람의 개입 없이 이 모든 것을 한 번에 수행할 수 있는 방법이 있습니까?

편집: -dm을 사용하여 제안된 접근 방식을 시도했습니다.

더 쉽게 볼 수 있도록 테스트 중인 내용은 다음과 같습니다.

ssh -t user@host screen "top"

원격으로 나는 이것을 본다:

user      2557  0.0  0.2  27192  1468 ?        Ss   13:35   0:00 SCREEN top
user      2562  0.0  0.1  11740   932 pts/0    S+   13:35   0:00 grep --color=auto SCREEN

하지만 이렇게 하면:

ssh -t user@host screen -dm "top"

나는 즉시 호스트와의 연결을 끊었습니다. 내 grep에는 아무것도 없습니다

ps aux | grep SCREEN
user      2614  0.0  0.1  11740   932 pts/0    S+   13:36   0:00 grep --color=auto SCREEN

답변1

-d -m스크린 세션을 사용하여 다음을 수행 할 수 있습니다 .

ssh myuser@hostname screen -d -m "python somepath.py -s 'potato'"

그러면 명령을 실행하고 자동으로 해당 세션에서 사용자를 분리할 새 화면 세션이 생성됩니다.

이 옵션은 다음과 같이 문서화되어 있습니다.

-d -m
분리 모드에서 화면을 시작합니다. 그러면 새 세션이 생성되지만 연결되지는 않습니다. 이는 시스템 시작 스크립트에 유용합니다.

~에Screen의 GNU 문서 페이지

답변2

-d -m해당 옵션은 작동하지만 따옴표에는 작동하지 않는다는 것을 알았습니다 . 나는 이것을 해야 한다:

ssh myuser@hostname screen -d -m python somepath.py -s 'potato'

허용된 답변에 명령 주위에 따옴표가 있는 이유를 모르겠습니다. GNU 문서에서는 필요하지 않고 내 시스템(Centos 7)에서는 이를 깨뜨렸기 때문입니다.

언급할 가치가 있는 점: Jenkins에서 SSH를 통해 실행할 때 화면이 활성 상태로 유지되지 않는 것을 확인했습니다. 상위 SSH가 연결되고 sh 스크립트가 실행 중일 때 활성화되지만 상위 SSH가 닫히면 종료되므로 화면에서 문제를 해결할 수 없는 상황이 발생할 수 있습니다.

나는 심지어 이 트릭을 사용해 보았습니다.

https://stackoverflow.com/questions/39471261/must-be-connected-to-a-terminal-error-with-screen-x-command-on-a-linux-contai

다음에 추가

script /dev/null

스크린콜 전에 해보았으나 문제가 해결되지 않았습니다. 젠킨스가 모든 것을 죽게 만드는 마법이 무엇인지는 모르겠지만 작동합니다.

Jenkins 프로세스 킬러에 의해 종료될 수 있으며 다음을 추가하여 비활성화할 수 있습니다.

export BUILD_ID=dontKillMe

https://serverfault.com/questions/502593/starting-a-forever-process-in-a-jenkins-build-step

내 경우에는 dontKillMe를 추가하여 장기 실행 프로세스(ssh 터널)를 계속 실행하는 행운을 누렸습니다. 하지만 불필요하기 때문에 더 이상 screen을 사용하지 않습니다.

관련 정보