Bash: получить вывод команды sudo на удаленном компьютере, используя SSH - PullRequest
0 голосов
/ 14 октября 2018

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

Когда я делаю:

#!/usr/bin/env bash

OUT=$(ssh username@host "command" 2>&1 )
echo $OUT

Затем я получаю ожидаемый результат в OUT.

Теперь, когда я пытаюсь выполнить команду sudo:

#!/usr/bin/env bash

OUT=$(ssh username@host "sudo command" 2>&1 )
echo $OUT

, я получаю "sudo: tty отсутствует и не задана программа askpass".Справедливо, я буду использовать ssh -t.

#!/usr/bin/env bash

OUT=$(ssh -t username@host "sudo command" 2>&1 )
echo $OUT

Тогда ничего не происходит.Он зависает, никогда не спрашивая пароль sudo в моем терминале.Обратите внимание, что это происходит независимо от того, отправляю ли я команду sudo или нет, ssh -t зависает, точка.

Хорошо, давайте пока забудем переменную и просто введем команду ssh -t.

#!/usr/bin/env bash

ssh -t username@host "sudo command" 2>&1

Тогда, ну, это работает без проблем.

Так что проблема в том, что ssh -t внутри переменной просто ничего не делает, но я не могу понять, почему или как заставить это работатьдля жизни меня.Кто-нибудь с предложением?

1 Ответ

0 голосов
/ 14 октября 2018

Если ваш сценарий довольно лаконичен, вы можете рассмотреть это:

#!/usr/bin/env bash

ssh -t username@host "sudo command" 2>&1 \
    | ( \
        read output
        # do something with $output, e.g.
        echo "$output"
    )

Для получения дополнительной информации рассмотрите это: https://stackoverflow.com/a/15170225/10470287

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...