중복 가능성:
ssh $host $FOO 및 ssh $host "sudo su user -c $FOO" 유형 구성에서 참조됩니다.
작은따옴표와 큰따옴표가 포함된 명령을 다른 명령으로 묶습니다.
SSH를 통해 PHP에서 SQL을 실행하고 싶습니다. 다음 명령은 잘 작동합니다
ssh server1 "sudo -u db2inst1 sh -c '/opt/ibm/db2/V9.7/bin/db2 connect to RATIONAL; /opt/ibm/db2/V9.7/bin/db2 set schema Edumate; /opt/ibm/db2/V9.7/bin/db2 \"select * from edumate_settings\"'"
이제 server1에서 server2로 ssh를 실행하고 거기에서 "sudo -u db2inst1...."을 실행해야 합니다.
이 시나리오에 추가 서버를 추가하는 경우 견적을 쉽게 처리할 수 있는 방법이 있습니까? 그래서 그것은 다음과 같이 시작될 것입니다
ssh server1 "ssh server2 "the rest is as above"
php.ini에서 위 코드를 실행해야 한다는 점에 유의하세요.
답변1
command_with_arguments
에서 로 이동하려고 합니다 command "escaped_command_with_arguments"
. escaped_command_with_arguments
왼쪽에서 오른쪽으로 스캔하고 각각을 및 각각으로 바꾸면 이를 얻을 수 있습니다 .command_with arguments
\
\\
"
\"
command_with_arguments
아니면 편집기를 넣고
- 모두
\
다음으로 교체\\
- 각각을
"
다음으로 교체하십시오.\"
이 순서대로. 따라서 단계별로 다음과 같은 일련의 표현식을 생성할 수 있습니다. (저는 Windows 메모장을 사용하여 표현식을 만들었습니다.)
select *
db2 "select *"
sudo "db2 \"select *\""
ssh "sudo \"db2 \\\"select *\\\"\""
ssh "ssh \"sudo \\\"db2 \\\\\\\"select *\\\\\\\"\\\"\""
ssh "ssh \"ssh \\\"sudo \\\\\\\"db2 \\\\\\\\\\\\\\\"select *\\\\\\\\\\\\\\\"\\\\\\\"\\\"\""
ssh "ssh \"ssh \\\"ssh \\\\\\\"sudo \\\\\\\\\\\\\\\"db2 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"select *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\"\\\"\""
\
마지막 표현식에서 각각의 수량을 계산하면 "
다음과 같은 순서를 얻게 됩니다.
0 1 3 7 15 31 31 15 7 3 1 0
또는
1-1 2-1 4-1 8-1 16-1 32-1 32-1 16-1 8-1 4-1 2-1 1-1
따라서 반복 없이 한 단계로 이러한 중첩 표현식을 구성하는 것이 가능하지만 표현식이 중첩되는 방식에 주의해야 합니다.
"
이러한 방법은 및 외에 다른 이스케이프 문자가 있는 경우 에도 확장될 수 있습니다 \
.
따라서 명령을 편집기에 입력하고 위와 같이 로 바꾸고, 로 바꾸고, 시작 server1
부분 server2
과 \
끝 \\
부분 에 추가하면 얻을 수 있습니다."
\"
ssh server1 "
"
ssh server1 "ssh server2 \"sudo -u db2inst1 sh -c '/opt/ibm/db2/V9.7/bin/db2 connect to RATIONAL; /opt/ibm/db2/V9.7/bin/db2 set schema Edumate; /opt/ibm/db2/V9.7/bin/db2 \\\"select * from edumate_settings\\\"'\""