Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:使用SSH在远程服务器上获取sudo命令的输出_Bash_Ssh - Fatal编程技术网

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

Bash:使用SSH在远程服务器上获取sudo命令的输出,bash,ssh,Bash,Ssh,我在这里感到非常沮丧。我只想在远程SSH连接上运行sudo命令,并对脚本中本地获得的结果执行操作。我已经环顾四周将近一个小时了,没有看到任何与这个问题相关的东西 当我这样做时: #!/usr/bin/env bash OUT=$(ssh username@host "command" 2>&1 ) echo $OUT 然后,我得到预期的输出 现在,当我尝试执行sudo命令时: #!/usr/bin/env bash OUT=$(ssh username@host "sudo

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

当我这样做时:

#!/usr/bin/env bash

OUT=$(ssh username@host "command" 2>&1 )
echo $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没有任何作用,但是我不知道为什么或者如何让它在我的一生中工作。有人有建议吗?

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

#!/usr/bin/env bash

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

有关更多信息,请考虑:

你的问题更适合于。这个站点用于编程相关的问题。考虑重定向以捕获输出:您正在捕获密码提示,因为您正在将STDRR重定向到STDUT。变量捕获无法完成运行,因为它正在等待您键入密码。另外,您应该在
echo“out”
中引用参数;不要对私有变量使用大写。如果你想在非交互式设置中使用sudo,你真的应该将其配置为不要求密码。嗯,这显示了同样的问题。在旁注中,这只返回第一行(因为它遇到了换行符)。我不能轻易绕过它,因为在我的Mac系统上read-N是一个非法选项。我会试试看是否可以升级bash版本。这确实让我觉得安装在我Mac电脑上的bash版本可能会有一些恶作剧,与Ubuntu服务器通信。我不知道为什么,但不确定为什么我会有问题。