我在这里感到非常沮丧。我只想在远程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不会执行任何操作,但是我无法弄清楚为什么或如何使其在我的生命中起作用。有任何建议吗?
答案 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