변수에 저장된 여러 줄 SSH 명령을 실행하는 방법

변수에 저장된 여러 줄 SSH 명령을 실행하는 방법

컨텍스트: 직접 액세스할 수 없는 원격 시스템에서 여러 명령을 실행하려고 합니다. 먼저 게이트웨이 시스템에 SSH를 통해 연결한 다음 거기에서 SSH를 통해 명령을 실행해야 합니다.

기본적으로 내가 추구하는 것은 SSH의 여러 레벨을 통과할 수 있는 명령 세트를 패키징하는 방법입니다. 이것이 가능합니까? 가장 좋은 대답은 scp를 사용하여 스크립트를 복사한 다음 실행하는 것입니다. 이는 옵션입니다.

무슨 일이 일어나고 있는지 보여주기 위해 호스트 이름 명령을 사용했다는 점에 유의하십시오. 이는 제가 실제로 원하는 작업이 아닙니다!

단일 SSH를 수행하고 거기에서 여러 줄의 명령 세트를 실행하는 명령에서 시작합니다.

ssh gateway.my.company "
  hostname;
  hostname;
"

이것은 잘 작동합니다. 출력은 다음과 같습니다.

target_machine
target_machine

그런 다음 명령 세트를 변수에 저장하고 이를 전달했습니다.

command="
  hostname;
  hostname;
"
ssh gateway.my.company $command

의 출력은 정확히 동일합니다. 두 hostname명령 모두 대상에서 실행됩니다.

다음으로 (개인용 머신에) 추가 SSH 홉을 추가합니다.

ssh gateway.my.company ssh target_machine_ip $command

이번에는 두 hostname명령이 서로 다른 시스템에서 실행됩니다.

target_machine
gateway_machine

cmd를 이스케이프된 따옴표(예: \"$command\")로 묶어 이 단계를 해결할 수 있는 것으로 보이지만 그렇게 하면 ssh gateway.my.company \"$command\"더 이상 작동하지 않으므로 직접적인 경우에 대해 다르게 래핑해야 합니다.

참고: 명령은 변수가 아닌 함수에 저장되어야 한다는 점은 높이 평가합니다. 하지만 ssh를 사용하고 있으므로 다음 서버에 ssh 연결하면 선언한 모든 함수가 존재하지 않게 됩니다.

편집: 원래 질문에서 두 번째 홉이 생략되었습니다. 죄송합니다!

답변1

일부 인용문만 누락되었습니다.

ssh gateway.my.company "$command"

관련 정보