Экранирование специалных символов для аргументов SSH команды

Экранирование специалных символов для аргументов SSH команды

31.01.2018 05:52:05 Просмотров 28 Источник

Задача:

  1. Переменная, содержит в конце $$

    $ a='SYS_$$'
    
    $ echo $a
    
    SYS_$$
    
  2. Тут разворачивает $$ в конце строки как номер процесса, а надо отобразить строку "SYS_$$", передаваемую как параметр.

    $ echo "echo \$1" | ssh another_host "/bin/sh -s $a"
    
    SYS_18992
    
У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b#comment1219058_778255
используйте одинарные кавычки для echo
https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b#comment1219067_778255
Одинарные кавычки не помогли: my_host: $ echo 'echo \$1' | ssh another_host "/bin/sh -s $a" $1 my_host:rman: $ echo 'echo $1' | ssh another_host "/bin/sh -s $a" SYS_26315

Ответы - Экранирование специалных символов для аргументов SSH команды / Экранирование специалных символов для аргументов SSH команды

Является ответом!
0xdb

31.01.2018 06:41:45

Попробуйте так:

$ a='SYS_$$'
$ echo 'echo $1' | ssh another_host "/bin/sh -s '$a'"

SYS_$$
  • При вызове ssh, внутри двойных кавычек одиночные кавычки тетряют своё специальное назначение и переменная будет замещена её значением, т.е. $SYS_$$.

  • Далее, при вызове sh на удалённом хосте, одиночные кавычки вновь приобретают своё специальное назначение и препятствуют замещению $$ текущим pid.

https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b/778284#comment1219089_778284
Спасибо! Это помогло! То что надо!
https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b/778284#comment1219094_778284
Нет, все-таки не помогло: my_host: $ a=SYS_$$$ my_host: $ echo 'echo $1' | ssh another_host "/bin/sh -s '$a' " SYS_8847608$
https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b/778284#comment1219102_778284
Здесь - a=SYS_$$$ - куда кавычки пропали?
https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b/778284#comment1219106_778284
да, точно, я ошибся.. работает
https://ru.stackoverflow.com/questions/778255/%d0%ad%d0%ba%d1%80%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d0%bf%d0%b5%d1%86%d0%b8%d0%b0%d0%bb%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb%d0%be%d0%b2-%d0%b4%d0%bb%d1%8f-%d0%b0%d1%80%d0%b3%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-ssh-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d1%8b/778284#comment1219111_778284
Хорошо, не забудте отметить ответ Баракина как принятый.
aleksandr barakin

31.01.2018 07:17:08

надо передать символы одинарных кавычек вокруг аргумента, с которым вызывается программа sh. для этого надо добавить перед кавычками символы \:

$ v='a$$'; echo 'echo $1' | ssh хост sh -s \'$v\'
a$$
Закрыть X