我正在尝试以 root 用户身份在远程服务器上运行脚本。我的 shell 脚本中有这一行。
cat /home/myuser/create_user_updated.sh | ssh myuser@$myip "sudo sh"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)
如果将文件复制到远程服务器并在本地执行,脚本“create_user_updated.sh”就可以正常工作。但它不适用于远程服务器。
您有两个选择:
您可以通过 sudo: run 禁用 tty 要求,visudo并且如果设置了“requiretty”选项,则全局删除它,或者基于每个用户:
Defaults:username !requiretty
您可以强制 ssh 分配伪 tty:
ssh -t -t myuser@$myip "sudo sh"
注意双 -t 选项,两者都是需要的。此外,您需要添加exit为create_user_updated.sh脚本的最后一行。否则,ssh 会话可能无法正常结束(因为强制创建伪 tty)。
仅当您在目标机器上没有 root 权限且无法更改 sudo 配置时,请使用选项 #2。#1 是更干净的解决方案。在我看来,从安全的角度来看,通过 sudo 强制执行 tty 的作用很小。