SSH 명령을 통해 따옴표와 아포스트로피를 이스케이프하세요

SSH 명령을 통해 따옴표와 아포스트로피를 이스케이프하세요

SSH를 통해 다음 명령을 실행하고 싶습니다.

echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt

나는 다음을 수행하려고합니다 :

ssh 127.0.0.1 -T "echo "trap '/tmp/test &' 2 9" >> /tmp/output.txt"

나는 다음과 같이 Python 하위 프로세스를 사용합니다.

command = "echo \"trap '/tmp/test &' 2 9\" >> /tmp/output.txt"
addtrap = 'ssh root@' + rhost + ' -T "' + command + '"'
subprocess.Popen(addtrap, shell=True)

하지만 분명히 따옴표와 아포스트로피가 포함된 몇 가지 버그를 발견했습니다. 이 문제를 방지하려면 어떤 옵션이 있습니까?

답변1

신뢰할 수 있는 방법은 다음과 같습니다.

ssh 127.0.0.1 sh << "EOF"
echo "trap '/tmp/test &' INT" >> /tmp/output.txt
EOF

그러면 어떤 쉘을 얻게 되는지 알 수 있습니다. 이것은 sh원격 사용자의 로그인 쉘이 아니며, 그것이 무엇이든 쉽게 코드를 전달하여 sh인용에 대한 걱정 없이 그대로 해석할 수 있습니다.

(그런데 절대 사용하고 싶지 않을 것입니다 -T. 원할 수도 있지만 -t대화형 응용 프로그램(예: vi대화형 셸)을 실행하려는 경우 일반적으로 SIGKILL을 포착할 수 없는 신호 9는 신호 이름을 사용하는 것이 좋습니다. 숫자보다는).

관련 정보