![인용 연습 - ssh에서 ssh를 실행하는 동시에 두 번째 ssh에서 sql을 실행하는 방법은 무엇입니까? [복사]](https://linux55.com/image/27496/%EC%9D%B8%EC%9A%A9%20%EC%97%B0%EC%8A%B5%20-%20ssh%EC%97%90%EC%84%9C%20ssh%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%8F%99%EC%8B%9C%EC%97%90%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20ssh%EC%97%90%EC%84%9C%20sql%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
중복 가능성:
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\\\"'\""