在远程服务器上运行脚本

sha*_*nuo 2 ssh sudo

我正在尝试以 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”就可以正常工作。但它不适用于远程服务器。

hai*_*img 8

您有两个选择:

  1. 您可以通过 sudo: run 禁用 tty 要求,visudo并且如果设置了“requiretty”选项,则全局删除它,或者基于每个用户:

    Defaults:username !requiretty

  2. 您可以强制 ssh 分配伪 tty:

    ssh -t -t myuser@$myip "sudo sh"

    注意双 -t 选项,两者都是需要的。此外,您需要添加exitcreate_user_updated.sh脚本的最后一行。否则,ssh 会话可能无法正常结束(因为强制创建伪 tty)。

仅当您在目标机器上没有 root 权限且无法更改 sudo 配置时,请使用选项 #2。#1 是更干净的解决方案。在我看来,从安全的角度来看,通过 sudo 强制执行 tty 的作用很小。