2016-12-21 2 views
1

Я пытаюсь запустить вложенный ssh ​​-t -t, но он не предоставит мне переменные окружения при работе с cat и echo.

#!/bin/bash 

pass="password\n" 
bla="cat <(echo -e '$pass') - | sudo -S su -" 
ssh -t -t -t -t jumpserver "ssh -t -t -t -t server \"$bla\" " 

Я получаю вывод без учета любых переменных. (например, PS1 не отображается, но команды работают нормально). Проблема связана с cat <(echo -e '$pass') -, но это был способ сохранить echo живым после предоставления пароля для sudo.

Как я могу достичь этого и получить переменные среды для получения правильного вывода?

Спасибо.

ответ

0
  1. -tt достаточно. Использование большего количества -t не добавляет никакого эффекта и просто создает впечатление, что вы не знаете, что делаете.

  2. Что такое cat <(echo -e)? Написание только echo приведет к тому же, не так ли?

  3. Почему использовать sudo su? sudo уже делает все, что вам нужно, не так ли?

Так как же это выглядит каким-то модным образом?

pass="password\n" 
bla="echo '$pass' | sudo -Si" 
ssh -tt jumpserver "ssh -tt server \"$bla\"" 

И это работает? Попробуйте отладить команды с помощью -vvv переключателей на ssh. Он покажет вам, что на самом деле выполняется и передается в оболочку друг друга.

+0

Спасибо за ответ! 1. Несколько -t были добавлены в качестве руководства ssh, в котором указано «Множество -t options force tty allocation». 2. echo proc умирает и убивает sudo su - вот почему я использовал эту конструкцию, 3. мне нужно иметь интерактивную оболочку как root, поэтому sudo! = Sudo su – Raz3k

+0

'sudo -i' - это то, что вам нужно. Если вы закрываете stdin для 'sudo', он, очевидно, заканчивается. – Jakuje

+0

просто попробовал, и без конструкции 'cat' он убивает соединение, спасибо. – Raz3k

Смежные вопросы