Bash:使用SSH在远程获取sudo命令的输出

时间:2018-10-14 16:53:27

标签: bash ssh

我在这里感到非常沮丧。我只想在远程SSH连接上运行sudo命令,并对在脚本中本地获取的结果执行操作。我已经环顾了近一个小时,却没有看到与此问题相关的任何信息。

当我这样做时:

#!/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 :(得分:3)

如果您的脚本很简洁,可以考虑一下:

#!/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

相关问题