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 如何仅抑制在远程主机上执行的sudo的标准输出?_Bash_Ssh - Fatal编程技术网

Bash 如何仅抑制在远程主机上执行的sudo的标准输出?

Bash 如何仅抑制在远程主机上执行的sudo的标准输出?,bash,ssh,Bash,Ssh,现在我想通过ssh在远程服务器上创建一个文件, 我想通过函数更改权限 function dummy_function() { ssh user@domain "touch -p /home/user/test_dir" ssh -q -t user@domain "sudo chmod 744 /home/user/test_file" if [[ $? -eq 0 ]]; then echo "log: success" else echo "log: fail

现在我想通过ssh在远程服务器上创建一个文件, 我想通过函数更改权限

function dummy_function() {
  ssh user@domain "touch -p /home/user/test_dir"
  ssh -q -t user@domain "sudo chmod 744 /home/user/test_file"
  if [[ $? -eq 0 ]]; then
    echo "log: success"
  else
    echo "log: failure"
  fi
}
上面的函数是一个简化版本,echo for log就是一个例子。所以请不要在意细节

我的问题是sudo生成的提示符与日志记录混合在一起

例如,上面的输出可以是

[sudo] password for user:
log: success    # or log: failure
我试过了

ssh -q -t user@domain "sudo --prompt='' chmod 744 /home/user/test_file"
它抑制了sudo的提示,但当我输入密码失败时, 日志消息被污染

Sorry, try again.
log: success    # or log: failure
似乎来自sudo的错误消息,抱歉,再试一次,通过标准输出。 如果sudo后面的命令通过标准输出提供一些消息,我不想关闭标准输出。我应该怎么做才能在远程主机上仅抑制来自sudo的消息


非常感谢。

当SSH创建一个伪tty时,它将远程命令的所有输出合并到标准输出中。没有办法把它们分开

您应该能够通过使用
-S
标志运行
sudo
来解决特定问题,使其使用标准错误和标准输入,而不是直接使用tty。然后,您可以在不使用伪tty的情况下运行ssh,并且可以避免记录sudo提示符,这将是标准错误。为了避免在键入密码时将密码回显到屏幕上,您可以将standard与
read
命令绑定。像这样的方法应该会奏效:

ssh -q user@domain "sudo -S chmod 744 /home/user/test_file" < <(read -s && echo $REPLY)
ssh-quser@domain“sudo-S chmod 744/home/user/test_文件”<