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는 신호 이름을 사용하는 것이 좋습니다. 숫자보다는).