Нужен скрипт для продолжения при переключении на нового пользователя

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

ssh -t $7 'cd /home/install/ ; su -c bash install ; tar -xvf [tarball] ; cd [directory] ; ./execute install ; bash'

Что он сделает, так это переключит моего пользователя на пользователя установки, но после этого он не выполнит ни одну из следующих команд. Только после того, как я выйду из установки и вернусь к пользователю root, эти последние команды будут запущены.

Итак, для tldr; Мне нужен способ запустить эти последние три команды от имени пользователя установки.

Спасибо за ваше время! :)


person user3681196    schedule 30.05.2014    source источник


Ответы (2)


У вас две проблемы: 1. Ваши кавычки интерпретируются 2. Вы неправильно используете su

Если вы хотите, чтобы su выполнял команды от имени этого пользователя, вы должны предоставить их в STDIN, например. echo 'cd; ls' | su user. Однако, чтобы сделать это, вам нужно кое-что сбежать.

Если команда, которую вы хотите запустить от имени пользователя, install:

cmd1; cmd2; cmd3

Поэтому вы предоставляете его su следующим образом:

echo 'cmd1; cmd2; cmd3' | su install

Однако вы также хотите выполнить его через ssh, что означает, что вам нужно экранировать кавычки в первой последовательности:

ssh user@host 'echo \'cmd1; cmd2; cmd3\' | su install'
person whereswalden    schedule 30.05.2014
comment
Ну, я попробовал ваш совет, и это не совсем так, как ожидалось. Однако я понял, что происходит. Мне нужен доступ к управлению заданиями, когда я переключаюсь на пользователя установки. Это ошибка, которую я получаю от bash, когда переключаю пользователей bash: в этой оболочке нет управления заданиями. - person user3681196; 30.05.2014
comment
Что я имею в виду под не работает, как ожидалось, так это то, что я вошел в систему, но как совершенно другой пользователь, чем если бы я ввел команду «su -c bash install». - person user3681196; 30.05.2014
comment
И я не могу подключиться через ssh install@host или sudo ssh install@host, так как разрешения на это запрещены. - person user3681196; 30.05.2014
comment
Я не могу помочь вам решить проблему с ssh; это в настройках вашего сервера. Что касается su, вам нужно удалить -c bash. Su берет свои команды из STDIN, а не из -c. Вместо этого вы могли бы сделать ssh user@host 'su install -c \'cmd1; cmd2; cmd3\'' - person whereswalden; 30.05.2014
comment
Немного повозившись, я смог заставить ваш совет работать. Я использовал другую настройку, чем вы предложили, но, похоже, она работает. - person user3681196; 30.05.2014

Используйте sudo вместо su, это то, что вам действительно нужно.

person piokuc    schedule 30.05.2014