Quotes exercise – как сделать ssh внутри ssh во время запуска sql внутри второго ssh?

Возможный дубликат:
Цитирование в строках ssh $ host $ FOO и ssh $ host "sudo su user -c $ FOO"
Объединение команды, включающей одиночные и двойные кавычки для другой команды

Я хочу запустить sql поверх ssh с php. Ниже команда работает красиво

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\"'" 

Теперь мне нужно сделать ssh с сервера1 на server2, а затем запустить «sudo -u db2inst1 ….» там.

Есть ли простой способ, как иметь дело с кавычками, если я добавлю дополнительный сервер к этому сценарию? Так оно начнется как

 ssh server1 "ssh server2 "the rest is as above" 

Обратите внимание, что мне нужно запустить код выше с php.

  • Очень медленное соединение SSH, не связанное с опцией GSSAPIAuthentication
  • Доступ к локальному репо через скачок с помощью SSH
  • Почему приложение «ssh -X» работает медленнее, чем vncviewer через «ssh -X»
  • Как сохранить процессы, выполняемые на удаленном сервере, даже после выключения терминальной машины?
  • Монитор MPSSH Прогресс, возможно, PV?
  • Туннели с тем же номером порта
  • Разница между открытыми и закрытыми входами sshd в / var / log / secure и входами и выходами в / var / log / wtmp
  • SSH-соединение сразу же закрывается после входа в систему
  • One Solution collect form web for “Quotes exercise – как сделать ssh внутри ssh во время запуска sql внутри второго ssh?”

    Вы хотите получить command "escaped_command_with_arguments" command_with_arguments для command "escaped_command_with_arguments" . Вы получаете escaped_command_with_arguments , сканируя command_with arguments слева направо и заменяя каждый \ by \\ и каждый " by \" .

    альтернативно вы command_with_arguments в редактор и

    1. замените все \ на \\
    2. замените каждый " by \"

    в этом порядке. Таким образом, шаг за шагом вы можете сгенерировать следующую последовательность выражений (я использовал блокнот 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\\\"'\"" 
    Linux и Unix - лучшая ОС в мире.