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신호 9, 일반적으로 SIGKILL은 트랩될 수 없으므로 숫자보다는 신호 이름을 사용하는 것이 좋습니다).

관련 정보