在远程服务器上运行脚本

在远程服务器上运行脚本

我正在尝试以 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

您有两个选择:

  1. 您可以通过 sudo:run 禁用 tty 要求visudo并全局删除“requiretty”选项(如果已设置)或根据每个用户删除:

    Defaults:username !requiretty

  2. 你可以强制 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

相关内容