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

Bash: get output of sudo command on remote using SSH

我在这里非常沮丧。我只想在远程ssh连接上运行sudo命令,并对脚本中本地获得的结果执行操作。我已经看了将近一个小时了,没有看到任何与这个问题有关的东西。

当我这样做的时候:

1
2
3
4
#!/usr/bin/env bash

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

然后,我得到预期的输出。

现在,当我尝试执行sudo命令时:

1
2
3
4
#!/usr/bin/env bash

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

我得到"sudo:没有tty存在,没有指定askpass程序"。很公平,我会用ssh-t。

1
2
3
4
#!/usr/bin/env bash

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

然后,什么都没有发生。它挂起了,从来没有在我的终端上请求过sudo密码。注意,无论我是否发送sudo命令,都会发生这种情况,ssh-t挂起,period。

好吧,我们暂时忘记这个变量,只需发出ssh-t命令。

1
2
3
#!/usr/bin/env bash

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

那么,好吧,没问题。

所以问题是变量内部的ssh-t不做任何事情,但是我不知道为什么或者如何让它为我的生活工作。有人有建议吗?


如果您的脚本相当简洁,您可以考虑:

1
2
3
4
5
6
7
8
#!/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