Выполнить локальный скрипт на удаленном хосте Linux

У меня есть локальный скрипт, который не будет работать без привилегий root на удаленном хосте. Я отредактировал и разрешил файлу sudoers запускать скрипт из домашнего каталога (/home/username/script). Сценарий создает текстовый файл с результатами, но я перенаправляю вывод на терминал и передаю вывод в текстовый файл на локальном компьютере.

Я не могу «ssh user@hostname sudo -Sv ‹ script.sh > results.txt», потому что это не запустит скрипт с удаленного хоста, в частности, из домашнего каталога.

Кто-нибудь знает способ (одну строку) скопировать скрипт на удаленный хост и выполнить его от имени пользователя root при получении вывода?

Спасибо за любую помощь


person John Milller    schedule 01.08.2013    source источник


Ответы (2)


Скопируйте скрипт с помощью scp, затем запустите его.

scp script.sh user@hostname:
ssh user@hostname sudo ./script.sh > results.txt

Чтобы сделать это в одну строку:

ssh user@hostname 'cat > script.sh; chmod 755 script.sh; sudo ./script.sh' < script.sh > results.txt

Однако это не сработает, если вам нужно ввести пароль в sudo. Весь стандартный ввод ssh будет помещен в сценарий. Возможно, есть способ сделать это с помощью Expect, но у меня нет в этом большого опыта.

person Barmar    schedule 01.08.2013
comment
Спасибо за оперативный ответ! Ключи ssh не сохраняются, поэтому мне нужно будет ввести 14-символьный пароль как при выполнении scp, так и при ssh. Есть ли способ сделать это в одну строку? - person John Milller; 01.08.2013
comment
Мне не нужно будет вводить пароль для sudo (запуск скрипта). Кажется, это будет отлично работать! Кроме того, большое спасибо за ваше время и помощь!! - person John Milller; 01.08.2013
comment
Это неправильный ответ на вопрос, речь шла об удаленном запуске команды, а не о передаче на удаленную машину! - person Rafareino; 11.02.2014
comment
В последней строке вопроса сказано скопировать скрипт на удаленный хост и выполнить его. - person Barmar; 11.02.2014

если у вас есть sudo и разрешено sudo для root, то это работает с немного меньшим синтаксисом:

ssh -T user@hostname 'sudo su -' < script.sh

person Gregory Patmore    schedule 21.11.2013