我正在尝试以 root 用户身份在远程服务器上运行脚本。我的 shell 脚本中有此行。
cat /home/myuser/create_user_updated.sh | ssh myuser@$myip "sudo sh"
我收到以下错误。
sudo: sorry, you must have a tty to run sudo
如果将文件复制到远程服务器并在本地执行,脚本“create_user_updated.sh”可以正常工作。但它无法在远程服务器上运行。
答案1
您有两个选择:
您可以通过 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 的作用很小。
答案2
使用visudo
编辑/etc/sudoers
文件并插入以下行:
Defaults:myuser !requiretty