SSH를 통해 기존 사용자 컨텍스트에 연결하는 가장 좋은 방법

SSH를 통해 기존 사용자 컨텍스트에 연결하는 가장 좋은 방법

우리가 하고 싶은 것:

스크립트를 실행하기 위한 임시 가상 머신이 있습니다. 가상 머신은 SSH를 통해 "빌드"(스크립트 순서)를 수행하고 모든 스크립트가 완료된 후 삭제됩니다. 각 스크립트는 새로운 SSH 연결/세션을 통해 실행됩니다.

이는 두 가지 주요 사용 사례를 제외하고 거의 모든 시나리오에 적합합니다.

  1. 스크립트가 가상 머신에 설치된 iOS 시뮬레이터를 제어해야 하는 경우(이것이 현재 우리가 해결하고 있는 주요 사용 사례입니다) - 기술 참고 사항: iOS 시뮬레이터는 GUI 컨텍스트에서만 적절하게 제어할 수 있습니다. Go 기반 미니서버(https://github.com/bitrise-io/xcodebuild-unittest-miniserver), 사용자가 로그인할 때 실행 에이전트로 시작되므로 사용자의 GUI 컨텍스트가 있습니다.
  2. OS X 키체인에 대한 액세스 유지(SSH를 통해 OS X 키체인을 열고 관리할 수 있지만 SSH 세션이 닫히면 키체인이 잠김)

어떻게든 가상 머신 내에서 에이전트를 시작할 수 있고 특정 데몬/에이전트에 연결할 수 있고 실행하려는 명령을 데몬/에이전트에 보내고 데몬/에이전트가 이를 실행하도록 할 수 있다면 두 문제 모두 가능합니다. 그것으로 해결되세요. 요구 사항은 가상 머신 내에서 실행되는 실제 스크립트/명령의 출력 스트림이 있어야 한다는 것입니다.

우리는 지금 무엇을 하는가간단한 SSH 명령(예: )을 통해 수행됩니다 ssh ssh-params 'bash -l -c "echo \"hello world\""'. 물론 이것은 매우 단순화된 예이지만 현재 가지고 있는 것과 유사하므로 다음을 얻을 수 있습니다.산출로깅 요구 사항을 충족하기 위한 스트림으로서의 명령 외에도 명령의 정보를 얻을 수 있습니다.종료 코드.

그래서우리는 무엇을 하고 싶은가?가상 머신 "외부"에서 지정되는 명령과 유사하지만 가상 머신 내부에서 실행됩니다.산출명령의 내용은 스크립트가 완료된 직후가 아니라 "외부"(호출자) 프로세스에 대한 스트림으로 사용할 수 있으며 명령의 내용은 다음과 같습니다.종료 코드"외부" 프로세스를 통해 쉽게 검색할 수 있습니다.

도구 사용에 관한 한, 우리는 매우 개방적입니다(SSH에 의존할 필요는 없습니다. 현재는 그렇게 작동합니다). 그러나 도구는 OS X에서 작동해야 하며 가능하다면 Linux(이 경우에는 OS X입니다)에서 작동해야 합니다. 문제가 있는 두 가지 사용 사례 모두 OS X와 ​​관련되어 있기 때문에 우선순위입니다.

TL;박사;우리는 위의 SSH 명령과 유사하게 사용할 수 있지만 원격(가상 머신) 측에서 이미 실행 중인 에이전트/데몬에 연결할 수 있는 도구를 원합니다.산출지정된 "원격 명령"에 의해 생성된 데이터는 호출자 프로세스에 대한 스트림으로 제공되어야 합니다.명령이 끝날 때뿐만 아니라. 원격 명령의 출력을 수집하는 것 외에도 해당 명령의 출력도 얻을 수 있어야 합니다.종료 코드.

마지막 말: 우리는 더 쉬운 방법을 찾을 수 없었기 때문에 마침내 자체 솔루션을 만들기로 결정했습니다. GitHub에서 찾을 수 있습니다.https://github.com/bitrise-io/cmd-bridge- 제가 설명한 모든 필요한 사항을 지원하며 명령 환경 변수 처리 지원도 포함합니다(환경 변수는 해당 원격 명령에 대해서만 정의됩니다).

답변1

가상 머신의 화면이나 tmux 세션에서 명령을 실행할 수 있나요? 이렇게 하면 여러 단계를 통해 동일한 세션에 명령을 연결/전송할 수 있습니다.

관련 정보