引用の練習 - sshでsshを実行し、2番目のsshでsqlを実行する方法は何ですか? [コピー]

引用の練習 - sshでsshを実行し、2番目のsshでsqlを実行する方法は何ですか? [コピー]

重複の可能性:
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またはエディタを置く

  1. すべて\次へ交換\\
  2. それぞれを"次のように交換します。\"

この順番で。したがって、段階的に次の一連の式を生成できます。 (私は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

したがって、繰り返しなしで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\\\"'\""

おすすめ記事