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