sshpass и SU и все команды вместе в одном линейном запросе

В моем сценарии: 1. Я должен подключиться к машине по ssh по имени пользователя и паролю 2. Затем мне нужно сделать Su-user, он запрашивает пароль 3. Затем я должен выполнить свою команду, т.е. ls .

Раньше не было шага 2, и я с радостью мог использовать sshpass и запускать свои запросы через мой скрипт в однострочной команде. что-то вроде этого. sshpass -p передать user@host "команда или ls"

Но теперь у меня есть еще один шаг выполнения su после ssh. Итак, может кто-нибудь, пожалуйста, помогите мне понять, как я могу использовать все 3 вместе, то есть sshpass, su и команду в одном запросе строки.

Спасибо


person Tajinder Singh    schedule 25.02.2016    source источник


Ответы (1)


Предполагая, что вы хотите изменить пользователей только для этой одной команды, вам нужен флаг «-c».

su - user -c "[command]"

Вложение кавычек может быть немного сложным, но в этом случае вам просто нужно экранировать внутренние.

su - user -c "sshpass -p pass user@host \"command or ls\""
person ScottyC    schedule 25.02.2016
comment
Я объясню, как я делаю это вручную. Я не уверен, работает ли ваше решение или нет. cmd1: ssh имя хоста -l пользователь запрашивает пароль. Я вхожу в него. hostname› su - user Он снова запрашивает пароль. затем я запускаю свою команду здесь, например, ls. похоже, вы сначала делаете su, а затем sshpass, и в вашей cmd нет места для ввода пароля su. - person Tajinder Singh; 26.02.2016
comment
@TajinderSingh - зачем пользователю судиться с самим собой? Помните, что ssh -l user host входит в систему как пользователь user. - person alvits; 26.02.2016
comment
Не себе. Я запускаю следующие команды: 1. sshpass -p abc123 ssh alpha@[email protected] 2. su - beta и затем введите пароль для этого пользователя beta ***** 3. затем я запускаю свою фактическую команду. forexample cat log.txt Сначала я должен выполнить ssh с использованием альфа-версии, а затем выполнить su для пользовательской бета-версии, а затем запустить команду как бета-версию. Возможно ли это в одном лайнере? Спасибо за ваше время :) - person Tajinder Singh; 26.02.2016
comment
@TajinderSingh - что мешает вам запустить sshpass -p betapass [email protected]? Очевидно, вы запускаете команду как пользователь beta, но не как пользователь alpha и пользователь beta последовательно. - person alvits; 26.02.2016
comment
Подход 1, шаг 1: я попробовал эту команду sshpass -p betapass [email protected]. Я получаю сообщение об ошибке: команда не найдена. Подход 2 шаг 1: Но когда я делаю это sshpass -p betapass [email protected] шаг 2: команда [[email protected] ~]$ ...... Это работает. Подход1 не работает, а подход2 работает, но я хочу что-то в одной строке, потому что я хочу запустить эту однострочную команду из своего кода. в моем коде я не могу выполнить этот двухэтапный процесс, упомянутый в подходе2. - person Tajinder Singh; 26.02.2016
comment
@TajinderSingh - разница между вашими подходами заключается в среде, в частности в PATH. Вы можете просто получить файлы окружения пользователя beta. Попробуйте sshpass -p betapass [email protected] "source .bash_profile; command". - person alvits; 26.02.2016
comment
Я попробовал это сейчас, и я получил это ....... bash: команда: разрешение отклонено. Похоже, он пытался запустить, но не имеет разрешения, есть идеи, что я могу сделать? Я думаю, что мы близки :) Спасибо - person Tajinder Singh; 26.02.2016