SSH를 사용하여 bash 파이프라인 실행

SSH를 사용하여 bash 파이프라인 실행

원격 호스트에서 ssh명령을 실행하는 명령을 실행하려고 합니다. bash내 문제는 실행 중에 다른 명령의 결과를 파이프하고 싶다는 것입니다.

ssh -i ~/keys/pem_key.pem [email protected] "sudo docker logs $(docker ps | grep 'test' | awk '{print$1}')"

명령 부분:

$(docker ps | grep 'test' | awk '{print$1}')

실행 중에는 실행되지 않습니다.

이것을 달성할 수 있는 방법이 있나요?

답변1

ssh인수를 통해 원격 장치에 복잡한 참조를 전달해야 하는 명령을 얻을 수 있지만 다음과 같이 제공하는 것이 더 간단한 경우가 많습니다.입력하다대신에:

 ssh -i ~/keys/pem_key.pem [email protected] <<'EOF'
 sudo docker logs $(docker ps | grep 'test' | awk '{print$1}')
 EOF

here-doc 구분 기호가 'EOF'인용되어 있으므로 입력이 실행되는 리모컨에 변경되지 않은 채 전달됩니다. 실제로는 입력에 없는 임의의 문자열일 수 있으며, EOF관례적이고 입력하기 쉬운 값일 뿐입니다. 원하는 경우 또는 대신 을 사용할 수도 있습니다 <<\EOF.<<"EOF"

또한 이 특별한 경우는 다음과 같이 단순화될 수 있습니다.

 ssh -i ~/keys/pem_key.pem [email protected] <<'EOF'
 sudo docker logs $(docker ps | awk '/test/{print$1}')
 EOF

답변2

해결책은 다음과 같습니다.

ssh -i ~/keys/pem_key.pem [email protected] "sudo docker logs \$(docker ps | grep 'test' | awk '{print\$1}')"

관련 정보