Как выполнить локальный сценарий, передав аргументы на удаленном компьютере через ssh от имени другого пользователя?

По сути, это то же самое, что и один из очень известных вопросов на техническом собеседовании UNIX, известных веками:

Предположим, что кто-то с корневым доступом запустил команда chmod -R 444 / и сделала двоичный файл chmod неисполняемым. Как вы оправитесь от этого?

Есть ответ perl, и есть этот, который в основном запускает неисполняемую программу, chmod в этом случае:

/lib/ld-linux.so /bin/chmod +x /bin/chmod

Я думаю, вы можете применить это для любой другой программы, которая, как вы знаете, является исполняемой. В противном случае будьте готовы принять катастрофу, которая может последовать

PS> /lib/ld-linux.so может отличаться по названию. Так что, если прямое соответствие недоступно, поищите одноименные so . Например, на моем сервере CentOS 6 это /lib/ld-linux.so.2 , которая является символической ссылкой, указывающей на /lib/ld-2.12.so . Итак, ваш пробег может отличаться.

3
20.02.2019, 15:44
1 ответ

Похоже, вы ожидаете, что "hello"будет передано сценарию в качестве аргумента, но не передаете его в качестве аргумента командной строки оболочке.

Вместо этого, чтобы передать скрипт на стандартный ввод в bash, используйте bash -s. Это также позволяет вам передавать дополнительный аргумент командной строки, например.bash -s "hello":

ssh...options... 'sudo -u remoteuser /bin/bash -s "hello"' <./hello.sh

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

Очевидно, что другой вариант — передать сценарий на удаленную систему и запустить его там.


Ваша команда

ssh...options... 'sudo -u remoteuser /bin/bash' <./hello.sh "hello"

идентично

ssh...options... 'sudo -u remoteuser /bin/bash' "hello" <./hello.sh

Позиционирование перенаправления на линии здесь не имеет значения. См., например. Насколько допустима эта команда? "> файл1 < файл2 кот"

2
27.01.2020, 21:24

Теги

Похожие вопросы