我正在尝试以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”可以正常工作。 但是它不能从远程服务器上运行。
你有两个select:
您可以通过sudo禁用tty要求:运行visudo并且如果设置为全局或基于每个用户,则全局删除“requiretty”选项:
Defaults:username !requiretty
你可以强制ssh分配伪tty:
ssh -t -t myuser@$myip "sudo sh"
注意double -t选项,都是需要的。 而且,您需要将exit作为create_user_updated.sh脚本的最后一行添加。 否则,ssh会话可能无法正常结束(因为强制伪tty创build)。
请仅在目标机器上没有root权限的情况下使用选项#2,并且不能更改sudoconfiguration。 #1是更干净的解决scheme。 在我看来,从安全angular度来说,通过sudo强制执行tty确实很less。
使用visudo编辑/etc/sudoers文件并插入下面的行:
Defaults:myuser !requiretty